我正在尝试使用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 ++头文件。
答案 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}
)