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