【问题标题】:Changing output directory of library created through pybind11_add_module更改通过 pybind11_add_module 创建的库的输出目录
【发布时间】:2020-02-17 13:47:01
【问题描述】:

我正在使用 CMake 使用 Pybind11 为我的代码构建一些 python 绑定。它运行良好,但它们在主 build 目录中编译。我希望它们建立在build\python 目录上。我正在尝试以下方法:

pybind11_add_module(myModule src/main.cpp)
set_target_properties(myModule PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python")

但它没有按预期工作,myModule 仍然构建在 build 目录上,就好像 set_target_properties 没有被调用一样。

在官方pybind11_add_module 文档中是这样写的:

此函数的行为与 CMake 的内置 add_library 非常相似(实际上,它是该命令的包装函数)。它将添加一个名为从列出的源文件构建的库目标。此外,它将处理所有 Python 特定的编译器和链接器标志以及 OS 和 Python 版本特定的文件扩展名。生成的目标可以通过常规 CMake 命令进一步操作。

所以我假设set_target_properties可以用来表示它之后的不同输出目录,不是这样吗?如果没有,怎么办?

提前谢谢你!

【问题讨论】:

  • 属性RUNTIME_OUTPUT_DIRECTORY 影响Windows 上的dll 库。对于.so 库,您需要使用LIBRARY_OUTPUT_DIRECTORY 属性。
  • 谢谢!!就是这样,不敢相信我在文档中错过了这一点。如果您想将其添加为答案,我很乐意将其标记为已解决!

标签: python cmake pybind11


【解决方案1】:

pybind11 模块是 SHARED 或 MODULE 类型的库。

在除 Windows(及其dll's)之外的所有平台上,通过 LIBRARY_OUTPUT_DIRECTORY 指定 SHARED 库的构建目录。

MODULE 库的构建目录在所有平台上通过LIBRARY_OUTPUT_DIRECTORY 指定,无一例外。

CMake 中输出工件的类型和对应的OUTPUT 变量的详细描述可以在documentation 中找到。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2013-04-21
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2018-08-09
    相关资源
    最近更新 更多