我有一个大致这样结构的 CMake 项目:
.
|-- library1
| |-- CMakeLists.txt
|-- library2
| |-- CMakeLists.txt
|-- executables
| |-- CMakeLists.txt
我在名为executables
. 我想知道是否有可能只生成一个可执行文件及其依赖项而不是全部。我听说过有关 cmake--target
选项的一些信息,但我无法使用它cmake/3.13.4
。
我有一个大致这样结构的 CMake 项目:
.
|-- library1
| |-- CMakeLists.txt
|-- library2
| |-- CMakeLists.txt
|-- executables
| |-- CMakeLists.txt
我在名为executables
. 我想知道是否有可能只生成一个可执行文件及其依赖项而不是全部。我听说过有关 cmake--target
选项的一些信息,但我无法使用它cmake/3.13.4
。
这里有几个潜在的问题。首先,典型的 CMake 工作流程将build
文件夹作为顶级 CMake 文件的同级文件。所以你的文件层次结构应该是这样的:
.
|-- CMakeLists.txt
|-- library1
| |-- CMakeLists.txt
|-- library2
| |-- CMakeLists.txt
|-- executables
| |-- CMakeLists.txt
|-- build <------------ Run CMake commands from here.
这会将所有 CMake 生成的文件隔离到该build
文件夹中。其次,您必须小心在正确的位置运行 CMake 构建阶段。我们可以从build
文件夹中运行所有内容,例如:
要生成构建系统,cmake ..
请从build
目录运行。第一步应该指向顶级 CMake 文件。
要构建(或编译)一个特定的目标,比如说它被称为MyExecutable1
,运行这个:
cmake --build . --target MyExecutable1
从build
目录。您必须确保将--build
标志指向build
文件夹,而不是这次的顶级 CMake 文件。此外,在此命令中指定的目标名称应与 中使用的目标名称匹配add_executable()
,而不是项目名称或其他任何名称。
与往常一样,在尝试运行 CMake 时遇到错误/问题时,它有助于清除缓存(删除build/CMakeCache.txt
),或者只是build
完全删除文件夹并重新开始。