我正在尝试将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项目中,我需要链接核心,bar和baz项目(它们都有自己的makefile)中的库,因此除了调用之外,我还在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
...
)
在我从the official CMake example复制setup.py的内部,我唯一修改过的行是在setup调用中:
ext_modules=[CMakeExtension('foo', sourcedir='.')],
这可以正确安装,但是会产生一个空模块:
>>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
我认为问题出在sourcedir
参数上,所以我尝试了两件事,但没有一件事起作用
setup.py
并用sourcedir='..'
调用setup.py
留在根目录中,然后用sourcedir='./foo'
调用在两种情况下我都得到:
3> LINK:致命错误LNK1181:无法打开输入文件'core.lib'
有人可以指出正确的方向来解决此问题吗?