CMake
CMake是一个项目构建工具,是跨平台的。CMake允许开发者指定整个工程的编译流程,并根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需make
编译即可,可以把CMake当作自动生成Makefile的工具,编译流程如下:
CMake优点:
- 跨平台
- 能够管理大型项目
- 简化编译构建过程和编译过程
- 可扩展,可以为cmake编写特定功能的模块,扩充cmake功能
CMake的使用
CMake支持大写、小写、混合大小写的命令
-
注释:
#
、#[[]]
# 行注释 #[[块 注 释]]
-
cmake CMakeLists.txt所在路径
:在当前路径./build
执行cmake ..
命令后生成了一个Makefile
文件,在执行make
命令,就可以对项目进行构建得到所需的可执行程序(默认可执行程序生成在./build目录下). ├── CMakeLists.txt ├── add.c ├── build │ ├── CMakeCache.txt │ ├── CMakeFiles │ ├── Makefile │ └── cmake_install.cmake ├── head.h ├── main.c └── sub.c
在执行
cmake
命令时指定宏的值:cmake CMakeLists.txt路径 -DCMAKE_CXX_STANDARD=11
-
cmake_minimum_required(VERSION 3.0)
:指定使用的cmake最低版本 -
project
:定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言project(<PROJECT-NAME> [<language-name>...]) project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [HOMEPAGE_URL <url-string>] [LANGUAGES <language-name>...]) project(csapp)
-
add_executable(可执行程序名 源文件名称)
:生成一个可执行程序,源文件可以有多个,并用空格或;
间隔 -
set
:定义变量or设置宏or拼接字符串set(变量名 [变量值] [CACHE TYPE DOCSTRING [FORCE]]) # 定义变量 set(SRC_LIST main.c;add.c;sub.c) add_executable(app ${SRC_LIST}) # 设置宏CMAKE_CXX_STANDARD的值指定cxx版本 set(CMAKE_CXX_STANDARD 11) # 设置宏EXECUTABLE_OUTPUT_PATH的值指定可执行程序输出路径,如果此路径不存在,会自动生成 # 由于可执行程序是基于cmake命令生成的makefile文件然后再执行make命令得到的,此处的相对路径./是makefile所在目录 set(EXECUTABLE_OUTPUT_PATH ../bin) # 拼接字符串,将从第二个参数开始往后所有的字符串进行拼接,最后将结果存储到第一个参数中,如果第一个参数中原来有数据会对原数据就行覆盖 set(变量名1 ${变量名1} ${变量名2})
-
aux_source_directory
:查找指定路径下的所有源文件aux_source_directory(<要搜索的目录> <将要搜索的目录下搜索到的源文件列表存储到该变量中>) CMAKE_CURRENT_SOURCE_DIR:宏表示当前访问的CMakeLists.txt文件所在路径 PROJECT_SOURCE_DIR:宏就是在使用cmake命令时,后面紧跟对的目录,一般是工程的根目录