第一章 初识cmake
-
cmake的主要特点
a. 开放源代码
b. 跨平台,并可生成native编译配置文件。Linux/Unix平台生成makefile,windows平台生成MSVC工程文件
c. 能够管理大型项目
d. 简化编译构建过程和编译过程。cmake工具链:cmake+make
e. 高效率
f. 可扩展,可为cmake编写特定功能模块,扩充cmake功能 -
cmake编写过程实际上是编程过程,每个目录要写一个CMakeList.txt,使用cmake语言和语法
-
如果工程只有几个文件,可直接编写Makefile
第二章 安装cmake
-
ubuntu安装cmake
sudo apt install cmake
-
Win10
官网下载 https://cmake.org/
然后按步骤安装,注意选择添加环境变量
安装完成后,在cmd中输入cmake输出以下信息,代表安装成功
第三章 初试cmake—hello world
-
创建目录存放工程
mkdir test1
-
在目录test1中建立main.c和CMakeLists.txt(注意大小写)
a. main.c中主要为printf(“Hello World!”)
b. CMakeLists.txt文件内容:PROJECT (HELLO) SET (SRC_LIST main.c) MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}) MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR}) ADD_EXECUTABLE(hello SRC_LIST)
-
开始构建
a. 在目录test1中执行以下命令cmake . //命令中的 . 代表本目录
i. 构建成功命令行会输出Configuring done Generating done
ii. 构建成功后系统会自动生成CMakeFiles、CMakeCache.txt、cmake_install.cmake等文件,并生成Makefile
b. 工程的实际构建:命令行输入make
c. 需要看到make构建的详细过程:make VERNOSE=1
d. 最终得到目标文件hello,可通过以下命令运行./hello
-
cmake文件解析
a. 若工程存在多个目录,需要确保每个目录都有一个CMakeLists.txt
b. PROJECT指令:定义工程名称、指定工程支持的语言(默认表示支持所有语言)
i. 语法:PROJECT(projectname [CXX] [C] [Java])
ii. 该指令隐式的定义了如下变量:
<projectname>_BINIARY_DIR
<projectname>_SOURCE_DIR
两个变量指的是工程所在路径
c. SET指令:定义变量
i. 语法:SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
ii. 例:SET(SRC_LIST main.c t1.c t2.c)
d. MESSAGE指令:向终端输出用户定义的信息
i. MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”)包含三种类型:
- SEND_ERROR 产生错误,生成过程被跳过
- STAUTS:输出前缀为-的信息
- FATAL_ERROR:立即终止所有cmake过程
e. ADD_EXECUTABLE(hello ${SRC_LIST}):
定义该工程会生成一个名为hello的可执行文件
-
基本语法规则
a. 变量应用方式:${ } (IF控制语句中不需要,可直接使用变量名)
b. 参数使用括号扩起,参数之间使用空格或者分号分开
c. 指令大小写无关,参数和变量大小写相关,但推荐全部使用大写指令
d. 工程名与可执行文件名无关