--- 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``` 、```devenv(vs)```。 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的名字即可