Ale*_*ing 20
如果您使用的是 Unix-y 操作系统,例如 Linux 或 macOS,那么您将运行:
$ cmake -DCMAKE_BUILD_TYPE=Release -S /path/to/source-dir -B /path/to/build-dir
$ cmake --build /path/to/build-dir
Run Code Online (Sandbox Code Playgroud)
这里,/path/to/source-dir是包含 root-level 的目录CMakeLists.txt,这通常是源代码控制存储库的根目录。同时,/path/to/build-dir是一个不同的目录(目前还不需要存在),CMake 将使用它来存储生成的构建系统及其输出。这称为树外构建。您永远不应该尝试使用 CMake进行树内构建,因为可能会发生名称冲突,并且清理生成的文件会遇到困难。
当使用单配置生成器(如 Make,这是 Unix 上的默认设置)构建时,您可以通过在第一个命令中设置变量来指定构建类型CMAKE_BUILD_TYPE,称为配置步骤。使用单配置生成器时,您必须始终设置此变量。内置配置是Debug、Release、RelWithDebInfo和MinSizeRel。有关此问题的更多详细信息,请参阅此答案。
配置步骤之后,您可以通过调用底层构建工具(在本例中为make)或调用 CMake 的通用构建启动器命令(cmake --build)来构建项目,就像我在这里所做的那样。
如果您使用的是 Windows,则默认生成器是 Visual Studio,它是一个多配置生成器。这意味着构建类型是在构建步骤而不是配置步骤中选择的,并且必须相应地调整命令:
$ cmake -S /path/to/source-dir -B /path/to/build-dir
$ cmake --build /path/to/build-dir --config Release
Run Code Online (Sandbox Code Playgroud)
这些步骤假设您正在查看的 CMake 构建运行良好。如果项目无法通过上述步骤构建,并且您已将其所有依赖项安装到系统位置(并且它们表现良好),那么您应该向上游项目提出问题。成熟 CMake 构建中最常见的不良行为来源是依赖项处理。很多时候,您必须阅读构建或其文档来确定需要设置哪些变量(通过-D,就像我们上面所做的那样CMAKE_BUILD_TYPE)以便项目找到其依赖项。
一些项目提供了启用/禁用测试、组件、功能等的选项。这些通常是通过在配置步骤期间将条目写入CMake 缓存来完成的。例如,禁用构建测试的常见方法是在命令行中设置BUILD_TESTING为:NO
$ cmake -S /path/to/source-dir -B /path/to/binary-dir [...] -DBUILD_TESTING=NO
Run Code Online (Sandbox Code Playgroud)
这个特定的变量是一个约定,但不保证得到遵守。检查项目的文档以查看哪些选项可用。
当专门使用Visual Studio生成器时,您可以告诉 CMake 您希望针对哪个平台以及您希望使用哪个版本的编译器。CMake 配置命令的完整形式是:
$ cmake -G "Visual Studio 16 2019" -A <ARCH> -T<TOOLSET> [...]
Run Code Online (Sandbox Code Playgroud)
有效值<ARCH>包括Win32、x64、ARM和ARM64。如果<TOOLSET>未指定,则将使用 32 位 MSVC 编译器。通常,您希望这样做是host=x64为了确保使用 64 位 MSVC,它可以为大型链接步骤分配更多内存。您还可以设置<TOOLSET>为ClangCL使用 Visual Studio 提供的 ClangCL 工具。
在所有生成器上,CMake 都会嗅探要使用的编译器的环境。它分别检查C 和 C++ 编译器的CC和CXX 环境变量。如果这些是空的,它将cc在. 您可以通过在 CMake 命令行(再次使用)中设置和CMake 缓存(不是环境)变量来手动覆盖编译器。c++PATHCMAKE_C_COMPILERCMAKE_CXX_COMPILER -D
构建 CMake 项目后,您可以通过运行以下命令将其安装到系统范围内或(最好)到本地前缀:
$ cmake --install /path/to/build-dir --prefix /path/to/install-dir [--config Release]
Run Code Online (Sandbox Code Playgroud)
--config仅当使用多配置生成器时才需要where 。CMAKE_PREFIX_PATH安装到本地前缀后,可以通过设置为 来配置依赖于它的项目/path/to/install-dir。