【问题标题】:Changing CMake build directory after running, within CMakeLists.txt在 CMakeLists.txt 中运行后更改 CMake 构建目录
【发布时间】:2018-05-09 17:43:31
【问题描述】:

是否可以从 CMakeLists.txt 文件更改 CMake 构建目录? 我正在查看 CMAKE_BINARY_DIR 变量,但它似乎是不可更改的。 原因是我的项目可以针对不同的平台进行编译,我希望用户定义一个构建目录,CMake会根据平台决定构建位置: 如果(x86):CMAKE_BINARY_DIR = CMAKE_BINARY_DIR/x86 if (x64): CMAKE_BINARY_DIR = CMAKE_BINARY_DIR/x64

简而言之,让用户不要为他要为其编译项目的每个平台配置构建目录。

谢谢, 安儿

【问题讨论】:

  • 正如我在my answer 中对其他问题所描述的,更改构建目录的唯一方法是调用add_subdirectory。例如。你可能有“元”顶级CMakeLists.txt,它将平台检测为PLATFORM变量,然后调用add_subdirectory(src ${PLATFORM})
  • 但是你需要为每个你想要编译它的平台复制你的源代码
  • 不,不需要复制源代码:当调用add_subdirectory(src ${PLATFORM}) 切换到特定于平台的构建目录${CMAKE_BINARY_DIR}/${PLATFORM} 时,源目录变为平台无关${CMAKE_SOURCE_DIR}/src
  • 知道了,谢谢!

标签: cmake


【解决方案1】:

不要这样做。

在 CMake 中,由 用户 指定他们要用于构建的二进制目录。这是在 CMake 的初始配置运行时完成的。例如,命令行工具将使用当前工作目录作为根构建目录。更改此目录需要您从头开始重新执行配置步骤。尝试以任何其他方式更改二进制目录是可取的。

可以做的是更改单个构建工件的输出目录。例如,对于 32 位构建,您可以将所有库放在 lib/x86 中,对于 64 位构建,您可以将所有库放在 lib/x64 中(通过 LIBRARY_OUTPUT_DIRECTORY 目标属性)。但这并不能解决您的问题。

更改架构仍然需要您从头开始重新运行 CMake 配置,您应该始终在单独的目录中执行此操作。您应该避免重新配置到肮脏的二进制目录中,因为这可能会以微妙的方式破坏并且从长远来看只是自找麻烦。

所以你的目录结构应该是这样的:

<build_32>
 +-lib
  +-x86
<build_64>
 +-lib
  +-x64

其中&lt;build_32&gt;&lt;build_64&gt; 是用户选择的文件夹。如果您想要一个像这样的单个目录树:

<prefix>
 +-lib
  +-x86
  +-x64

最干净的方法是通过安装。从上面的两个单独的构建目录中,用户可以执行安装到相同的安装前缀,以检索如上所示的目录树。虽然您仍然必须注意不要在安装过程中意外覆盖来自其他配置的重要构建工件,但管理这通常比确保共享构建目录简单得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2012-07-15
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    相关资源
    最近更新 更多