更改通过pybind11_add_module创建的库的输出目录

时间:2020-02-17 13:47:01

标签: python cmake pybind11

我正在使用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可以用来表示后面的另一个输出目录,不是吗?如果没有,怎么办?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

在所有平台上都通过LIBRARY_OUTPUT_DIRECTORY指定了MODULE库的构建目录。

documentation中可以找到CMake中输出工件类型的详细说明以及相应的OUTPUT变量。