如何使 CMake 输出到“bin”目录?

新手上路,请多包涵

我目前正在构建一个带有插件结构的项目。我正在使用 CMake 编译项目。插件在单独的目录中编译。我的问题是 CMake 将二进制文件和插件、动态库编译并保存在源代码的目录结构中。如何让 CMake 将文件保存在 ./bin 目录之类的目录中?

原文由 Martin Kristiansen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

正如奥列格的回答一样,我相信要设置的正确变量是 CMAKE_RUNTIME_OUTPUT_DIRECTORY 。我们在根 CMakeLists.txt 中使用以下内容:

 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

您还可以基于每个目标指定输出目录:

 set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

在这两种情况下,您都可以将 _[CONFIG] 附加到变量/属性名称以使输出目录适用于特定配置(配置的标准值是 DEBUGRELEASEMINSIZERELRELWITHDEBINFO )。

原文由 Adam Bowen 发布,翻译遵循 CC BY-SA 4.0 许可协议

serg06 的回答 进行了进一步改进:

要强制三个路径按原样用于所有生成器和所有构建配置,您可以添加一个空的生成器表达式,如下所示:

 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "$<0:>${CMAKE_BINARY_DIR}/bin") # .exe and .dll
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "$<0:>${CMAKE_BINARY_DIR}/lib") # .so and .dylib
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "$<0:>${CMAKE_BINARY_DIR}/lib") # .lib and .a

这具有强制 Visual Studio 生成器按原样使用指定路径的副作用,而不是附加特定于配置的子目录,而无需 foreach 循环。

原文由 BTJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题