Posts CMake
Post
Cancel

CMake

What

CMake是一个开源、跨平台的工具,旨在构建、测试和打包软件。CMake通过简单的、独立于平台和编译器的配置文件来控制软件编译过程,并生成makefiles

CMake源文件

以CMake编写的源文件以CMakeLists.txt命名或以.cmake为扩展名。

可以使用include命令包含.cmake。与其他语言允许将源文件拆分为模块或头文件类似,.cmake里可以定义函数、宏等,然后在多个CMakeLists.txt中复用。

CMakeLists.txt是CMake在构建项目时使用的主配置文件,当执行CMake时,它的第一件事就是查找此文件。

CMake变量

CMake中变量都是string类型。可以使用set()unset()命令来声明或者移除一个变量。

变量的引用:${变量名}

变量作用域

函数级:在函数中定义的变量,作用域是函数内。

目录级:子目录的CMakeLists.txt会将父目录的所有变量拷贝到当前CMakeLists.txt中,当前CMakeLists.txt中变量的作用域仅在当前子目录有效,即修改子目录中变量的值,不影响父目录中同名变量的值。“向下有效,值拷贝”特点。

全局级:cache变量,在整个项目范围内,一般在SET定义变量时,指定CACHE参数就能定义为cache变量。

编译过程

在 Linux 平台下使用 CMake 构建 C/C++ 工程的流程如下:

  • 编写 CMakeLists.txt 规则
  • mkdir build
  • cd build
  • cmake ..
  • make

CMakeLists.txt demo

静态库&动态库

编译加速

ccache

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装
sudo apt-get install ccache

# 创建软连接,让系统选择编译器时优先使用ccache
cd /usr/local/bin
ln -s ccache /usr/local/bin/gcc
ln -s ccache /usr/local/bin/g++
ln -s ccache /usr/local/bin/cc
ln -s ccache /usr/local/bin/c++

# 设置缓存空间大小
ccache -M 10G

# 查看ccache使用情况
ccache -s

# 清除缓存
ccache -C

How to speed up Compile Time of my CMake enabled C++ Project?

同名函数编译结果

This post is licensed under CC BY 4.0 by the author.