我希望能够将我的 C++ 代码作为 python 包调用。为此,我正在使用pybind11
与 CMakelists (按照这个例子https://github.com/pybind/cmake_example)。我的问题是我必须在代码编译中包含 GSL 库,并且这些库需要显式链接器-lgsl
.
如果我只是编译并运行 C++,而不用 python 包装它,则以下 Cmakelists.txt 文件可以完成这项工作
cmake_minimum_required(VERSION 3.0)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
project(myProject)
add_executable(
myexecutable
main.cpp
function1.cpp
)
find_package(GSL REQUIRED)
target_link_libraries(myexecutable GSL::gsl GSL::gslcblas)
但使用时pybind11
我找到的模板不允许add_executable
所以target_link_libraries
不起作用。
我已经尝试过这个
project(myProject)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES) # See below (1)
# Set source directory
set(SOURCE_DIR "project")
# Tell CMake that headers are also in SOURCE_DIR
include_directories(${SOURCE_DIR})
set(SOURCES "${SOURCE_DIR}/functions.cpp")
# Generate Python module
add_subdirectory(lib/pybind11)
pybind11_add_module(namr ${SOURCES} "${SOURCE_DIR}/bindings.cpp")
FIND_PACKAGE(GSL REQUIRED)
target_link_libraries(GSL::gsl GSL::gslcblas)
但这会在建筑物中产生错误。
任何想法 ?
功能pybind11_add_module
创建一个库target,可用于将添加的模块与其他库链接:
pybind11_add_module(namr ${SOURCES} "${SOURCE_DIR}/bindings.cpp")
target_link_libraries(namr PUBLIC GSL::gsl GSL::gslcblas)
这在文档:
该函数的行为非常类似于 CMake 的内置函数add_library
(事实上,它是该命令的包装函数)。它将添加一个名为的库目标<name>
从列出的源文件构建。此外,它将处理所有特定于 Python 的编译器和链接器标志以及特定于操作系统和 Python 版本的文件扩展名。产生的目标<name>
可以使用常规 CMake 命令进一步操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)