Я пытаюсь интегрировать pybind11 в моем проекте с CMake.Моя структура выглядит следующим образом:
foo
├───pybind11
├───src
└─── __init.py__ (empty)
│ └─── mymodule.cpp
└─── __init.py__ (empty)
└───CMakeLists.txt
src
├───core
├───bar
├───baz
└───CMakeLists.txt
setup.py
CMakeLists.txt
В моем проекте foo мне нужно связать библиотеки в проектах core, bar и baz (которые имеют все свои собственные make-файлы), поэтому я настроил относительный импорт вмой foo/CmakeLists.txt
файл, кроме вызова pybind11, очевидно:
add_subdirectory(pybind11)
pybind11_add_module(foo src/mymodule.cpp)
set(CORE "../src/core")
...
target_link_libraries(foo PUBLIC
core
bar
baz
)
target_include_directories(pyceam
PUBLIC ${core}/include
...
)
внутри Я скопировал setup.py из официального примера CMake , единственной строки, которую я имеюизменено в вызове установки:
ext_modules=[CMakeExtension('foo', sourcedir='.')],
Это устанавливает правильно, но он производит пустой модуль:
>>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
Я понял, что проблема была в параметре sourcedir
, поэтомуЯ пробовал две вещи, но ни одна из них не сработала:
- переместить
setup.py
в foo и вызвать с sourcedir='..'
- оставить
setup.py
в корневом каталоге и вызвать сsourcedir='./foo'
и в обоих случаях я получаю:
3> ССЫЛКА: фатальная ошибка LNK1181: не могу открыть входной файл 'core.lib'
Кто-нибудь может указать мне правильное направление, чтобы решить эту проблему?