CMake 完全解析:用户交互指南
0. 引言
如果软件包为基于CMake的构建系统提供了软件源,则软件的使用者需要运行CMake用户交互工具来构建它。
行为良好的基于CMake的构建系统不会在源目录中创建任何输出,因此通常,用户会执行源外构建并在那里执行构建。首先,必须指示CMake生成合适的buildsystem,然后用户调用构建工具来处理生成的buildsystem。生成的buildsystem特定于用于生成它的计算机,不可再发行。提供的源软件包的每个使用者都需要使用CMake生成特定于其系统的buildsystem。
生成的构建系统通常应被视为只读的。作为主要工件的CMake文件应该完全指定buildsystem,并且没有理由在IDE中手动填充属性,例如在生成buildsystem之后。CMake将定期重写生成的buildsystem,因此用户的修改将被覆盖。
通过提供CMake文件,本手册中描述的特性和用户界面可用于所有基于CMake的构建系统。
在处理提供的CMake文件时,CMake工具可能会向用户报告错误,例如报告编译器不受支持,或者编译器不支持所需的编译选项,或者找不到依赖项。这些错误必须由用户通过选择不同的编译器、安装依赖项或指示CMake在何处找到它们等来解决。
0.1 命令行cmake工具
cmake(1) 与新的软件源代码副本的一个简单但典型的用法是创建一个构建目录并在那里调用cmake:
$ cd some_software-1.4.2
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/the/prefix
$ cmake --build .
$ cmake --build . --target install
建议在源代码的单独目录中生成,因为这样可以保持源代码目录的原始状态,允许使用多个工具链生成单个源代码,并允许通过简单地删除生成目录来轻松清除生成工件。
CMake工具可能会报告针对软件提供商的警告,而不是针对软件使用者的警告。此类警告以“此警告针对项目开发人员”结尾。用户可以通过将-Wno-dev标志传递给cmake(1)来禁用此类警告。
0.2 cmake gui工具
更习惯于GUI界面的用户可以使用cmakegui(1)工具来调用cmake并生成buildsystem。
必须首先设置源代码路径和二进制目标代码路径。通常建议对源代码和生成使用不同的目录。

1. 生成 Buildsystem
有几种用户界面工具可用于从CMake文件生成 buildsystem。ccmake(1) 和cmake-gui(1) 工具指导用户设置各种必要的选项。可以调用cmake(1)工具在命令行上指定选项。本手册描述了可使用任何用户界面工具设置的选项,尽管每个工具的设置模式不同。
1.1 命令行环境
使用Makefiles或Ninja等命令行构建系统调用cmake(1)时,必须使用正确的构建环境以确保构建工具可用。CMake必须能够根据需要找到合适的构建工具、编译器、链接器和其他工具。
在Linux系统上,通常在系统范围内的位置提供适当的工具,并且可以通过系统包管理器轻松安装。也可以使用用户提供的或安装在非默认位置的其他工具链。
交叉编译时,有些平台可能需要设置环境变量,或者提供脚本来设置环境。
Visual Studio 提供多个命令提示和 vcvarsall.bat 批处理脚本为命令行 buildsystem 设置正确环境。虽然在使用Visual Studio生成器时不一定要使用相应的命令行环境,但这样做没有缺点。
使用Xcode时,可以安装多个Xcode版本。可以通过多种不同的方式选择要使用的方法,但最常用的方法是:
- 在Xcode IDE的首选项中设置默认版本。
- 通过xcode select命令行工具设置默认版本。
- 在运行CMake和构建工具时,通过设置DEVELOPER\u DIR环境变量来覆盖默认版本。
为了方便起见,cmakegui(1) 提供了一个环境变量编辑器。
1.2 命令行-G选项
CMake默认根据平台选择生成器。通常,默认生成器足以允许用户继续构建软件。
用户可以使用-G选项覆盖默认生成器:
$ cmake .. -G Ninja
cmake–help的输出包括一个可供用户选择的生成器列表。请注意,生成器名称区分大小写。
在类Unix系统(包括macosx)上,默认情况下使用Unix Makefiles生成器。该生成器的一个变体也可以在各种环境中的Windows上使用,例如NMake Makefiles和MinGW Makefiles生成器。这些生成器生成一个Makefile变量,可以使用make、gmake、nmake或类似工具执行。有关目标环境和工具的更多信息,请参阅单个生成器文档。
忍者发生器可在所有主要平台上使用。ninja是一个构建工具,在用例中与make类似,但是它关注性能和效率。
在Windows上,可以使用cmake(1)为visualstudioide生成解决方案。visualstudio版本可以由IDE的产品名指定,其中包括四位数的年份。别名用于有时引用Visual Studio版本的其他方式,例如与VisualC++编译器的产品版本相对应的两个数字,或两者的组合:
$ cmake .. -G "Visual Studio 2019"
$ cmake .. -G "Visual Studio 16"
$ cmake .. -G "Visual Stu

本文详细介绍了CMake的用户交互过程,包括命令行工具cmake与cmake-gui的使用,如何设置生成变量,CMake缓存的管理,以及软件的安装和测试。涵盖了生成buildsystem的选择,编译器设置,预设配置,以及常见错误处理。
最低0.47元/天 解锁文章
1307

被折叠的 条评论
为什么被折叠?



