cmake 项目仅构建一个特定的可执行文件(及其依赖项)

HFi*_*nch 4 build cmake build-target

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

.
|-- library1
|   |-- CMakeLists.txt
|-- library2
|   |-- CMakeLists.txt
|-- executables
|   |-- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

executables我生成我的 2 个可执行文件。我想知道是否可以只生成一个可执行文件及其依赖项而不是全部。我听说了一些关于 cmake--target选项的消息,但我无法让它与cmake/3.13.4.

squ*_*les 8

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

.
|-- CMakeLists.txt
|-- library1
|   |-- CMakeLists.txt
|-- library2
|   |-- CMakeLists.txt
|-- executables
|   |-- CMakeLists.txt
|-- build    <------------ Run CMake commands from here.
Run Code Online (Sandbox Code Playgroud)

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

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

  2. 构建(或编译)一个特定的目标,假设它被调用MyExecutable1,运行这个:

    cmake --build . --target MyExecutable1
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  • `cmake --build 。--target MyExecutable1` 似乎不起作用。所有目标仍需配置。 (2认同)