记录学习CMake管理C++工程的过程。
cmake简介
cmake是一个管理软件build过程的工具,它并不会直接build出软件可执行文件本身,而是制作出可以build出软件本身的全部工程文件,比如makefiles、msvc的工程文件,然后我们可以通过执行这些工程文件,完成最终的编译。
cmake是一种解释执行的脚本语言,但其语法设计古怪,语言表达力弱,基本上可以认为也就比shell脚本强一丢丢,无法与常规高级语言相提并论,但工程管理能力强大。
- 优点:
- 操作透明而细腻
- 它专注于现代C++编程、专注于支持C++现代编译器和工具链
- 支持生成目录几乎所有主流IDE的项目
- 缺点:
- 它还在成长
- CMake它是一门语言,需要学习成本
CMake基础命令
使用CMake管理C++工程,需要在项目目录中创建CMakeLists.txt脚本文件进行配置。
- 生成平台相关的工程文件,命令形式如下:
cmake <source_dir> -B <build_dir> -G <generator> ......
说明:
- source_dir 项目源代码目录的路径
- -B build_dir 指定构建系统的输出目录
- -G
指定了生成的构建系统文件的生成器 - “Unix Makefiles” 生成 Makefile
- “Visual Studio 16 2019” 生成 Visual Studio 项目
- -D =
: 设置 CMake 变量的值。例如 -DCMAKE_BUILD_TYPE=Release 设置构建类型为 Release。
- 编译制作出的工程文件,得到最终结果文件,命令形式如下:
cmake --build ......
注:或平台相关的编译命令,如msbuild、make等
综合上面两步,命令示例:
cmake -B buildProject -S XXX 编译源码,生成xx.sln工程 cmake --build buildProject 构建工程,生成xx.exe
实例1引入
工程目录
KCircle1
|-----CMakeLists.txt
|-----KCircle.cpp
|-----KCircle.h
|-----main.cpp
CMakeLists.txt 编写
cmake_minimum_required(VERSION 3.10)
Project(KCircle1)
add_executable(${PROJECT_NAME} KCircle.cpp main.cpp)
生成工程文件以及编译文件
在项目的文件夹下输入构建命令:
mkdir Debug
cd Debug
cmake -B . -S ../hello
cmake --build .
返回信息0个警告、0个错误则表明编译成功。