добавлен подкаталог в CMakeLists.txt не обнаруживается с помощью main.cpp

#c #python-3.x #cmake #pybind11 #cmakelists-options

#c #python-3.x #cmake #pybind11 #cmakelists-параметры

Вопрос:

Я работаю над созданием привязки python к коду c с использованием Pybind11. Моя архитектура проекта следующая:

 -- MyProject
   | -- lib
         | -- pybind11
              | -- CMakeLists.txt
              | -- include
         | -- myCPPCode
              | -- CMakeLists.txt
              | -- MyCodeDefinitions.h
              | -- MyCode.cpp
   | -- src
         | -- MyProject
              | -- MyModule.cpp
   | -- CMakeLists.txt
   | -- setup.py
  

что я хочу сделать, так это включить #include <myCPPCode/MyCodeDefinitions.h> в MyModule.cpp .

Чтобы сделать это, я добавил в глобальную CMakeLists.txt следующую команду: add_subdirectory(lib/myCPPCode) , Но она не работает, так как я не знаю, что вставить lib/myCPPCode/CMakeLists.txt , и я получаю следующую ошибку:

 path/MyProject/src/MyProject/MyModule.cpp:2:10: fatal error: myCPPCode/MyCodeDefinitions.h: No such file or directory
    2 | #include <myCPPCode/MyCodeDefinitions.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~
  

Содержимое lib/myCPPCode/CMakeLists.txt является следующим:

 cmake_minimum_required(VERSION 3.13)
project(myCPPCode)


add_library(myCPPCode MyCode.cpp)
  

Как я должен настроить свой CMakeLists.txt и lib/myCPPCode/CMakeLists.txt ?

Заранее благодарю вас!

Комментарии:

1.Вы никогда не должны #include .cpp использовать файлы. Это опечатка?

2. Привет @ super Нет, это не опечатка. Что мне делать вместо этого, если я хочу использовать функцию, определенную в другом файле?

3. Вы создаете .hpp файл с объявлением в in. Затем поместите определение в .cpp файл. .cpp Файл компилируется, обычно как его собственная единица перевода, и когда какой-либо другой код должен использовать эти функции, он просто включает объявление из .hpp , и все это объединяется во время компоновки.

4. @super я вижу, спасибо за ваш комментарий, я это сделаю

5. @super Я обновил вопрос с вашим предложением!

Ответ №1:

add_subdirectory Просто сообщает cmake, чтобы найти CMakeLists.txt в каталоге, указанном в качестве аргумента.

Вам нужно изменить свой add_subdirectory(lib/myCPPCode) into include_directories(lib/myCPPCode) , и он должен работать лучше.

Комментарии:

1. Привет @sylvain Я попробовал ваше решение, но оно не сработало, я все еще получаю ту же ошибку, должен ли я изменить что-то еще?

2. Поскольку вы хотите включить <myCPPCode/MyCodeDefinitions.h> , вы должны написать include_directories(lib) или написать include_directories(lib/myCPPCode) и включить <MyCodeDefinitions.h>