在pybind11和C ++中添加源代码时,未提供针对目标错误的解决方案

时间:2019-03-26 14:07:08

标签: c++ cmake setuptools pybind11

我正在尝试使用pybind11使用C ++编写的库在python中工作。

源文件的编译和构建可以正常工作,但是使用pip安装时,生成的文件将引发此错误。

 CMake Error at pybind11/tools/pybind11Tools.cmake:131 (add_library):
      Cannot find source file:

        ../project/variables.cpp

      Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
      .hpp .hxx .in .txx
    Call Stack (most recent call first):
      CMakeLists.txt:5 (pybind11_add_module)


    CMake Error at pybind11/tools/pybind11Tools.cmake:131 (add_library):
      No SOURCES given to target: project
    Call Stack (most recent call first):
      CMakeLists.txt:5 (pybind11_add_module)

我正在关注cmake_example,并且确定该文件存在。实际上,如果我删除文件,则在运行时会发生错误

python setup.py sdist

文件夹结构如下:

C++ project root folder
|-- C++ Project source files
|-- pybind folder
|------pybind11 source folder
|----------pybind.cpp file
|------pybind11 CmakeLists.txt
|------pybind11 Manifest.in

这是pybind使用的CMakeLists.txt。

cmake_minimum_required(VERSION 2.8.12)
project(project)

add_subdirectory(pybind11)
pybind11_add_module(project
project/pybind.cpp
../project/variables.cpp
../project/instances.cpp
.
.
.
)

Manifest.in文件中同时包含C ++和pybind源文件夹。此外,引用project/pybind.cpp文件也没有错误。

另外,几个月前,在同一项目中,这种构建python模块的方法对我有用。我已经尝试过downgradin setuptools,pybind11和cmake,但是它不起作用。我可能是错的,但我认为我所做的唯一更改就是在pybind.cpp文件中向项目和som函数添加了两个C ++头文件。

1 个答案:

答案 0 :(得分:2)

您不应使用相对路径,因为位置是相对于CMake的某些内部细节给出的!

使用例如:

${CMAKE_PROJECT_DIR}/project/variables.cpp

或者更好的方法是使用FILE的结果,因为它会正确填充这些结果。

即使project/bind.cpp应该是相对的,但从CMake知道并知道该子文件夹的意义上来说,您还是很幸运的。但是请不要这样做,请使用FILE正确选择它们(您可以在其中相对)。

FILE(GLOB PYBIND_SRC
project/pybind.cpp
../project/variables.cpp
../project/instances.cpp
)

pybind11_add_module(project
${PYBIND_SRC}
)