pybind11目录结构问题

时间:2018-10-04 14:51:32

标签: python cmake pip linker-errors pybind11

我正在尝试将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参数上,所以我尝试了两件事,但没有一件事起作用

  1. 在foo中移动setup.py并用sourcedir='..'调用
  2. setup.py留在根目录中,然后用sourcedir='./foo'调用

在两种情况下我都得到:

  

3> LINK:致命错误LNK1181:无法打开输入文件'core.lib'

有人可以指出正确的方向来解决此问题吗?

0 个答案:

没有答案