5

我有一个大致这样结构的 CMake 项目:

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

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

4

1 回答 1

9

这里有几个潜在的问题。首先,典型的 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. 生成构建系统cmake ..请从build目录运行。第一步应该指向顶级 CMake 文件。

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

    cmake --build . --target MyExecutable1
    

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

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

于 2019-08-09T12:53:03.627 回答