Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构建CMake项目?_Cmake - Fatal编程技术网

如何构建CMake项目?

如何构建CMake项目?,cmake,Cmake,我刚刚从互联网上获得了一个任意的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

我刚刚从互联网上获得了一个任意的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\u build\u 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
这些步骤假设您正在查看的CMake构建行为良好。如果项目未能按照上述步骤进行构建,并且您已将其所有依赖项安装到系统位置(并且这些依赖项表现良好),那么您应该向上游项目提出一个问题。在成熟的CMake构建中,最常见的不良行为源是依赖关系处理。您经常需要阅读构建或其文档来确定项目需要设置哪些变量(通过
-D
,就像我们在上面的
CMAKE_build_TYPE
中所做的那样),以找到其依赖项

高级主题 设置选项和缓存变量 一些项目提供了启用/禁用测试、组件、功能等的选项。这些选项通常通过在配置步骤中将条目写入CMake缓存来完成。例如,禁用建筑测试的常用方法是在命令行中将
BUILD\u TESTING
设置为
NO

$ cmake -S /path/to/source-dir -B /path/to/binary-dir [...] -DBUILD_TESTING=NO
此特定变量是一种约定,但不能保证遵守。查看项目文档,查看哪些选项可用

选择生成器和工具链 特别是在使用Visual Studio生成器时,您可以告诉CMake您希望以哪个平台为目标,以及您希望使用哪个版本的编译器。CMake configure命令的完整形式如下:

$ cmake -G "Visual Studio 16 2019" -A <ARCH> -T<TOOLSET> [...]

其中
--config
仅在使用多配置生成器时才需要。一旦安装到本地前缀,依赖于它的项目可以通过将
CMAKE_prefix_PATH
设置为
/PATH/to/install dir

来配置,在这里,这个问题大约有一百万种变体,因此我找不到规范副本。这是我试图提出这样一个规范的问题/答案的尝试。
$ cmake --install /path/to/build-dir --prefix /path/to/install-dir [--config Release]