我正在使用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
可以用来表示后面的另一个输出目录,不是吗?如果没有,怎么办?
提前谢谢!
答案 0 :(得分:2)
pybind11
模块是SHARED或MODULE类型的库。
在除Windows(及其LIBRARY_OUTPUT_DIRECTORY
之外)的所有平台上,通过dll
指定了SHARED库的构建目录。
在所有平台上都通过LIBRARY_OUTPUT_DIRECTORY
指定了MODULE库的构建目录。
在documentation中可以找到CMake中输出工件类型的详细说明以及相应的OUTPUT
变量。