在 pybind11 和 C++ 中添加源时没有给目标错误的源

No soucers given to target error when adding sources in pybind11 and C++

我正在尝试使用 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
.
.
.
)

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

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

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

使用实例:

${CMAKE_PROJECT_DIR}/project/variables.cpp

或者更好,使用 FILE 的结果,因为它正确地填充了这些。

即使 project/bind.cpp 也应该是相对的,但你很幸运,因为 CMake 知道该子文件夹并计算出来。但是不要那样做,正确地使用 FILE 到 select 它们(你可以在那里是相对的)。

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

pybind11_add_module(project
${PYBIND_SRC}
)