pybind11,cmake:如何安装文件?

inn6fuwd  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(109)

我正在将一个C++库与越来越流行的pybind11接口,以获得原生Python绑定;配置是通过CMake
我的CMakeLists.txt看起来像

cmake_minimum_required(VERSION 3.0)

project(foo)

FILE(GLOB foo_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")

FIND_PACKAGE(pybind11 REQUIRED)
pybind11_add_module(mylib ${foo_SRCS})

字符串
然而,这似乎没有注册安装规则。因此,虽然构建树中的所有内容都按预期工作,但make install什么也不做。
需要添加哪些内容才能按顺序进行安装?

eqfvzcg8

eqfvzcg81#

只是普通的CMake安装命令:

include(GNUInstallDirs)

install(TARGETS mylib
  COMPONENT python
  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")

字符串
对于Unix,您可以手动创建其他平台的目标目录。“COMPONENT”部分是可选的,但对于不同类型的安装程序来说更整洁。

xcitsw88

xcitsw882#

我将创建的库安装到python<version>/site-packages目录

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
...
install(TARGETS mylib
        COMPONENT python
        LIBRARY DESTINATION "lib/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages"
        ARCHIVE DESTINATION "lib"
        RUNTIME DESTINATION "bin")

字符串
这样,python解释器就可以找到库,而不需要额外操作PYTHONPATH
变量Python3_VERSION_MAJORPython3_VERSION_MINOR由“find_package”指令提供

相关问题