首页 文章

在CMakeLists.txt中运行后更改CMake构建目录

提问于
浏览
2

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

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

谢谢,阿纳

1 回答

  • 0

    不要这样做 .

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

    您可以做的是更改单个构建工件的输出目录 . 例如,您可以将所有库放在 lib/x86 中用于32位版本,而在 lib/x64 中用于64位版本(通过LIBRARY_OUTPUT_DIRECTORY target属性) . 这不会解决你的问题 .

    更改体系结构仍然需要您从头开始重新运行CMake配置,您应始终将其放入单独的目录中 . 您应该避免重新配置到脏二进制目录中,因为这可能会以微妙的方式破坏,并且从长远来看只会遇到麻烦 .

    所以你的目录结构看起来像这样:

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

    <build_32><build_64> 是用户选择的文件夹 . 如果你想要一个像这样的目录树:

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

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

相关问题