首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PythonandC++:如何在包括GSL库在内的Cmakelist中使用pybind11

PythonandC++:如何在包括GSL库在内的Cmakelist中使用pybind11
EN

Stack Overflow用户
提问于 2018-04-23 01:57:58
回答 1查看 8.2K关注 0票数 6

我希望能够将我的C++代码作为python包调用。要做到这一点,我使用pybind11和CMakelists (按照下面的示例示例)。我的问题是,我必须在代码的编译中包含GSL库,这些库需要一个显式的链接器-lgsl

如果我只是编译并运行C++,而不使用python包装它,那么下面的Cmakelists.txt文件就可以完成这个工作

代码语言:javascript
运行
AI代码解释
复制
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不能工作。

我已经试过了

代码语言:javascript
运行
AI代码解释
复制
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)

但这会在建筑中产生错误。

知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 02:06:24

函数pybind11_add_module创建了一个库目标,它可以与其他库一起用于添加链接模块:

代码语言:javascript
运行
AI代码解释
复制
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命令进一步操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49978208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档