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

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

本文关键字:错误 目标 pybind11 C++ 添加      更新时间:2023-10-16

我正在尝试使用 pybind11 制作一个用 python 编写C++库。

源文件的编译和构建工作没有错误,但是在使用 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

这是 CMakeLists.txt由 pybind 使用。

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 模块的方法对我有用。我已经尝试了降级设置工具,pybind11和cmake,但它不起作用。我可能是错的,但我认为我所做的唯一修改是在pybind.cpp文件中的项目和 som 函数中添加了几个C++标头。

您不应该使用相对路径,因为位置是相对于 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}
)