#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>