一,CMake简介
CMake的全称是Cross-platform Make。我第一次参与Linux C++开发时使用的工具是Make,而后开始切换到CMake,一开始以为CMake是和C语言有关,原来开头的C表示它可以跨平台。
CMake的使用场景:
跨平台编译运行,交叉编译。一般基于CMakeLists.txt文件定义的编译构建规则来生成目标文件和目标库。
CMakeLists.txt样例如下:
#cmake最低版本需求
cmake_minimum_required(VERSION 3.13)
#项目名称
project(cmake_study)
#相关设置用set函数
set(CMAKE_CXX_STANDARD 11)
#生成的可执行文件的名称
add_executable(cmake_study src/main.cc)
在Linux环境使用CMake的构建和编译流程如下:
step1. 编写CMake的配置文件——CMakeLists.txt。
step2. 执行命令 cmake PATH 或者 ccmake PATH 构建生成 Makefile配置文件。PATH为CMakeLists.txt所在的目录。
step3. 在Makefile文件所在的路径,执行make命令进行编译。
一般使用过程如下:
$ mkdir build
$ cd build/
$ cmake ..
$ make
* 为了不让编译产生的中间文件污染项目的文件结构,专门创建build文件夹进行编译构建。
二,CMake与Make的区别
CMake并不直接参与软件的构建和编译,而是生成用于构建的Makefile等配置文件。因此在完成同样的编译任务时,CMake比Make的用法更容易,且屏蔽了Makefile中的很多复杂的语法点。
三,CMakeLists.txt语法
cmake的语法由函数名和参数构成,参数区分大小写,函数名不区分大小写(这个依据个人喜好,笔者习惯用小写,大写有点费眼睛+_+)。
(1) cmake_minimum_required
含义:设置项目所需的最低cmake版本以及更新策略
语法:
cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])
使用样例:
cmake_minimum_required(VERSION 2.8.0)
(2) project
含义:设置项目的名称、版本、编程语言等信息
语法:
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[LANGUAGES <language-name>...])
使用样例:
project(Demo)
(3) set
含义:设置普通变量、缓存或环境变量的值
语法:
set(<variable> <value>... [PARENT_SCOPE])
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
set(ENV{<variable>} [<value>])
使用样例:
set(CMAKE_CXX_COMPILER D:/MinGW/bin/g++)
(4) file
含义:定义对文件系统的文件和路径的操作,可以结合Linux指令对文件的操作去理解。
语法:
file(READ <filename> <out-var> [...])
file({WRITE | APPEND} <filename> <content>...)
file(MAKE_DIRECTORY [<dir>...])