You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
3.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
icon: edit
date: 2023-01-16
category:
- 系统配置
- cpp
tag:
- CMake
headerDepth: 5
---
# cmake 命令详解
#### Cmake命令行使用:
```shell
-G 指明生成的Makefile 的生成器
-D 添加参数
-S 指明源码位置
-B 指明输出路径
-A 指定系统架构
-U 标志可用于取消设置变量
```
例如:
```
cmake -G "MinGW Makefiles" -S "源码路径" -B "输出路径"
```
或者
```
cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE="编译工具链路径" -S "源码路径" -B "输出路径"
```
**注意:Cmake是不支持中文的,无论是GUI还是命令行,都严禁出现中文字符.**
#### -G 命令详解
##### 一、介绍
CMake默认根据平台选择一个生成器。通常默认生成器足以让用户继续构建软件。用户可以使用-G选项覆盖默认生成器:
```shell
$ cmake .. -G Ninja
```
1. cmake --help的输出包括一个可供用户选择的生成器列表。注意生成器名称是区分大小写的
![image-1673858124577](https://local.wuanwanghao.top:9000/test/test/image-1673858124577.png)
2. 项目构建工具
类似make的工具有 ```Ninja``` 、```nmake``` 、```devenvvs```。
makefile 可以理解为是make工具使用的代码make读取makefile中的配置信息来实现编译、链接和部署。
![image-1673858287897](https://local.wuanwanghao.top:9000/test/test/image-1673858287897.png)
##### -G 细节
在类Unix系统(包括Mac OS X)上默认情况下使用Unix Makefiles生成器。该生成器的一个变体也可以在Windows的各种环境中使用比如NMake Makefiles和MinGW Makefiles生成器。这些生成器生成一个Makefile变量可以用make、gmake、nmake或类似的工具执行
而Visual Studio生成器可以针对不同的体系结构。可以使用-A选项指定目标架构:
```shell
cmake .. -G "Visual Studio 2019" -A x64
cmake .. -G "Visual Studio 16" -A ARM
cmake .. -G "Visual Studio 16 2019" -A ARM64
```
请注意在第一次调用CMake之后不可能使用-G来更改生成器。要更改生成器必须删除构建目录并且必须从头开始构建。
#### -D 命令详解
```
CMAKE_INSTALL_PREFIX #设置构建完成的安装路径
CMAKE_TOOLCHAIN_FILE #编译工具链路径
CMAKE_PREFIX_PATH #搜索路径 dependent packages
CMAKE_MODULE_PATH #搜索其他 CMake 模块的路径
CMAKE_BUILD_TYPE #构建配置,例如 Debug或Release确定调试/优化标志。这仅与单配置构建系统相关例如Makefile和Ninja。用于 Visual Studio 和 Xcode 的多配置构建系统会忽略此设置。
BUILD_SHARED_LIBS #是否构建共享库而不是静态库add_library() 没有类型的命令
CMAKE_EXPORT_COMPILE_COMMANDS #生成compile_commands.json 用于基于 clang 的工具的文件
CMAKE_MAKE_PROGRAM #可以启动本机构建系统的工具。该值可能是可执行文件的完整路径,或者只是工具名称 如果它应该位于PATH.
CMAKE_C_COMPILER #设置C的编译器
CMAKE_CXX_COMPILER #设置C++的编译器
```
CMAKE_MAKE_PROGRAM 属性值 和 -G 一般搭配使用
如果 -G 指定了 ```Ninja```生成器 那么CMAKE_MAKE_PROGRAM 就要指定Ninja 所在位置 D:/Program Files/JetBrains/CLion 2022.1.3/bin/ninja/win/ninja.exe 但 如果 ninja.exe 在环境变量中可以不指定 或者只用写ninja的名字即可