如何构建CMake项目? [英] How do I build a CMake project?
问题描述
我刚刚从互联网上获得了一个任意的CMake项目,我不确定如何编译它。我需要运行哪些命令才能从命令行生成它?
推荐答案
基本步骤
如果您使用的是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
这里,/path/to/source-dir
是包含根级别CMakeLists.txt
的目录,这通常是源代码管理存储库的根。同时,/path/to/build-dir
是一个不同的目录(还不需要存在),CMake将使用它来存储生成的构建系统及其输出。这称为树外构建。您应该永不尝试使用CMake进行树内生成,因为可能会发生名称冲突,并且在清理生成的文件时会遇到困难。
使用单配置生成器(如make,这是Unix上的默认生成器)生成时,您可以通过设置第一个命令中的CMAKE_BUILD_TYPE
变量(称为配置步骤)来指定生成类型。在使用单配置生成器时,必须始终设置此变量。内置配置为Debug
、Release
、RelWithDebInfo
和MinSizeRel
。有关详细信息,请参阅this answer。
在配置步骤之后,您可以通过调用底层构建工具(在本例中为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
这些步骤假定您正在查看的CMake版本行为良好。如果项目无法通过上述步骤进行构建,并且您已将其所有依赖项安装到系统位置(并且它们行为良好),那么您应该打开上游项目的问题。在成熟的CMake构建中,最常见的不良行为来源是依赖关系处理。通常情况下,您必须阅读构建或其文档来确定需要为项目设置哪些变量(通过-D
,就像我们上面对CMAKE_BUILD_TYPE
所做的那样),才能找到它的依赖项。
高级主题
设置选项和缓存变量
某些项目提供启用/禁用测试、组件、功能等选项。这些通常通过在配置步骤期间将条目写入CMake缓存来完成。例如,禁用构建测试的常见方法是在命令行将BUILD_TESTING
设置为NO
:
$ cmake -S /path/to/source-dir -B /path/to/binary-dir [...] -DBUILD_TESTING=NO
此特定变量是约定,但不保证遵守。请查看项目文档以了解哪些选项可用。
选择生成器和工具链
专门使用Visual Studio生成器时,您可以告诉CMake您希望面向哪个平台以及您希望使用哪个版本的编译器。为此,CMake配置命令的完整形式为:
$ cmake -G "Visual Studio 16 2019" -A <ARCH> -T<TOOLSET> [...]
<ARCH>
的有效值包括Win32
、x64
、ARM
和ARM64
。如果未指定<TOOLSET>
,则将使用32位MSVC编译器。通常,您会希望设置为host=x64
,以确保使用64位MSVC,这样可以为大型链接步骤分配更多内存。您还可以将<TOOLSET>
设置为ClangCL
以使用Visual Studio提供的ClangCL工具。在所有生成器上,CMake嗅探要使用的编译器环境。它分别检查C和C++编译器的CC
和CXX
环境变量。如果这些文件为空,它将在PATH
中查找cc
和c++
可执行文件。您可以通过在CMake命令行设置CMAKE_C_COMPILER
和CMAKE_CXX_COMPILER
CMake cache(而不是环境)变量(再次使用-D
)来手动覆盖编译器。
使用依赖项安装&;
生成CMake项目后,您可以在系统范围内安装,或者(最好)通过运行以下命令将其安装到本地前缀:
$ cmake --install /path/to/build-dir --prefix /path/to/install-dir [--config Release]
其中--config
仅在使用多配置生成器时才是必需的。安装到本地前缀后,可以通过将CMAKE_PREFIX_PATH
设置为/path/to/install-dir
来配置依赖于它的项目。
这篇关于如何构建CMake项目?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!