【问题标题】:cmake project build only one specific executable (and its dependencies)cmake 项目仅构建一个特定的可执行文件(及其依赖项)
【发布时间】:2019-08-08 12:27:49
【问题描述】:

我有一个大致如下结构的 CMake 项目:

.
|-- library1
|   |-- CMakeLists.txt
|-- library2
|   |-- CMakeLists.txt
|-- executables
|   |-- CMakeLists.txt

我在名为executables 的文件夹中生成了两个可执行文件。我想知道是否有可能只生成一个可执行文件及其依赖项而不是全部。我听说过有关 cmake --target 选项的一些信息,但我无法让它与 cmake/3.13.4 一起使用。

【问题讨论】:

  • 明确地说,您是否只想构建(即编译)一个可执行文件?还是您只想配置/生成(在 CMake 时)一个可执行文件?
  • @kamil 我在 stackoverflow 上阅读了它,但我丢失了链接。我试过cmake --build .. --target target_name,但收到错误消息CMake Error: The source directory "/build/target_name" does not exist.
  • @squareskittles 我想编译可执行文件,但只有我命名的那个及其依赖库。
  • 您的命令行在语法上看起来是正确的,但您的构建文件夹实际上是否命名为build? CMake 是否为名称为 target_name 的目标生成了?
  • 你是如何配置 cmake 的? --build 应该指向你配置 cmake 的文件夹。

标签: build cmake build-target


【解决方案1】:

这里有几个潜在的问题。首先,典型的 CMake 工作流程将 build 文件夹作为顶级 CMake 文件的同级文件夹。所以你的文件层次结构应该是这样的:

.
|-- CMakeLists.txt
|-- library1
|   |-- CMakeLists.txt
|-- library2
|   |-- CMakeLists.txt
|-- executables
|   |-- CMakeLists.txt
|-- build    <------------ Run CMake commands from here.

这会将所有 CMake 生成的文件隔离到 build 文件夹。其次,您必须小心在正确的位置运行 CMake 构建阶段。我们可以从build 文件夹中运行所有内容,例如:

  1. 生成构建系统,从build 目录运行cmake ..。第一步应该指向顶级 CMake 文件。

  2. 构建(或编译)一个特定的目标,比如说它叫做MyExecutable1,运行这个:

    cmake --build . --target MyExecutable1
    

    来自build 目录。您必须确保将--build 标志指向build 文件夹,这次不是顶级CMake 文件。此外,此命令中指定的目标名称应与add_executable() 中使用的目标名称匹配,而不是项目名称或其他任何名称。

  3. 与往常一样,在尝试运行 CMake 时遇到错误/问题时,它有助于清除缓存(删除 build/CMakeCache.txt),或者干脆删除 build 文件夹并重新开始。

【讨论】:

  • cmake --build . --target MyExecutable1 似乎不起作用。所有目标仍处于配置状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2019-09-06
  • 2017-09-07
  • 2013-04-30
  • 1970-01-01
  • 2020-07-24
  • 2021-08-19
相关资源
最近更新 更多