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

标签 cmake

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

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

谢谢,
安尔

最佳答案

不要这样做。

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

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

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

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

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

哪里<build_32><build_64>是用户选择的文件夹。如果你想要一个像这样的单个目录树:
<prefix>
 +-lib
  +-x86
  +-x64

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

关于cmake - 运行后更改 CMake 构建目录,在 CMakeLists.txt 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47494785/

相关文章:

在 Mac OSX 10.11.6 上找不到 clock_gettime

c++ - CMake 和 Make 需要运行两次才能成功构建代码

cmake - 使用 cmake 编译

c++ - 如何将一个 exe 项目链接到另一个 exe 项目中的类

c++ - CMake 在 include_directories 中找不到正确的头文件/包含文件

cmake - 构建cmake静态库

android-studio - Android Studio 与系统 CMake 通信时出错

c++ - 将多个文件链接到可执行文件

visual-c++ - 组织 CMake 项目,以便可以在 Visual C++ 中轻松浏览源代码

linux - 如何从 CMake 工具链文件设置 LD_LIBRARY_PATH?