运行时输出目录的 cmake 生成器表达式

标签 cmake cross-platform

是否有 CMAKE_RUNTIME_OUTPUT_DIRECTORY 的生成器表达式?

我想将一个目录复制到运行时输出目录,我目前这样做:

 add_custom_target(copy_target ALL)
 add_custom_command(TARGET copy_target POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_directory
      ${CMAKE_CURRENT_SOURCE_DIR}/foo
      $<TARGET_FILE_DIR:other_target>/foo)

只需复制到 CMAKE_RUNTIME_OUTPUT_DIRECTORY不适用于为每个配置创建子目录的多配置生成器(Visual Studio、XCode)。

上面的示例有效,但它创建了不必要的依赖项 copy_targetother_target 。我更喜欢类似 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_$<CONFIG>} 的东西但这没有被接受(意外 < )。此外,该解决方案还应该适用于单配置生成器,${CMAKE_RUNTIME_OUTPUT_DIRECTORY_$<CONFIG>}可能不会。

还有$<TARGET_FILE_DIR:copy_target>不起作用,因为 copy_target是一个虚拟的,不是二进制的。

最佳答案

变量 CMAKE_CFG_INTDIR可能会有所帮助,例如:

add_custom_command(TARGET copy_target POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_directory
      ${CMAKE_CURRENT_SOURCE_DIR}/foo
      ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/foo)

关于运行时输出目录的 cmake 生成器表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31817291/

相关文章:

当 zip 文件更改时,CMake 自动解压缩(在构建时)

c++ - CMake 将多个子项目构建到一个目录中

visual-studio - 通过 Visual Studio 在 WSL 1 上使用 vcpkg

python - 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

visual-studio - 如何在目标之间创建人为的循环依赖

github - 找不到 OpenSSL,尝试设置 OpenSSL 根文件夹的路径

cmake - 如何在 cmake 中为不同的编译器应用不同的编译器选项?

适用于 Windows、Mac 和 iOS 的音频库? OpenAL/OpenSL

cross-platform - 是否可以使用 GLib 进行操作系统检测?

C++线程 - 并行处理