【问题标题】:Specifying build directory within CMakeLists file在 CMakeLists 文件中指定构建目录
【发布时间】:2021-12-21 21:37:40
【问题描述】:

是否可以在 CMakeLists 文件中指定构建目录?如果是,如何。

我的目标是能够在顶级源目录中调用“cmake”并让 cmake 找出构建目录。

【问题讨论】:

标签: cmake


【解决方案1】:

Afaik,使用CMake,构建目录始终是您调用cmakeccmake 命令的目录。所以如果你想改变构建目录,你必须在运行 CMake 之前改变目录。

要控制完成后放置可执行文件、静态库和共享库的位置,您可以分别修改 CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_ARCHIVE_OUTPUT_DIRECTORYCMAKE_LIBRARY_OUTPUT_DIRECTORY

【讨论】:

  • 是的,我同意你的第一点,但我的目的是能够避免每次我对 CMakeLists 进行更改时“cd”来构建目录。
  • 你不能尝试一个源代码构建(虽然它通常不受欢迎,但在这种情况下它可能是你需要的)?除此之外,这实际上不是 cmake 的问题,而是 make 本身的问题 - 从您调用 make 的任何位置,这就是构建目录。
【解决方案2】:

按照设计,没有办法在 CMakeLists.txt 中指定。它旨在让用户能够在他们想要的任何目录中构建项目。典型的工作流程是:

  1. 查看项目源代码。
  2. 如果您打算进行源内构建,请转到所需的构建目录或源目录。
  3. 运行 cmake 或 ccmake 以在该构建目录中配置项目。
  4. 构建您的项目。

在 CMakeLists.txt 中指定的所有目录都应与 ${PROJECT_BINARY_DIR} 和 ${PROJECT_SOURCE_DIR} 变量相关。这样,您的代码就可以跨不同平台构建,这是 CMake 的目标。

【讨论】:

  • 同意,但在我看来,能够在 CMakeLists.txt 中指定构建目录可以作为一个选项,它仍将保持跨不同平台的构建。例如而不是做“cmake ../build”,可以在 CMakeLists.txt 中有一个选项,类似于“set(CMAKE_BUILD_DIRECTORY ../build)”,因为这进入项目的顶部 CMakeLists.txt 它应该可以工作。
  • 随时在我们的public issue tracker 上请求此功能。我不确定它是否会受到好评,因为它有点违背通常的 CMake 配置模型,但你可以在那里获得更多的社区讨论。
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
相关资源
最近更新 更多