CMake 基础介绍
- 1. CMake 介绍
- 2. CMake 安装
- 3. 入门样例 - Hello-world 工程
1. CMake 介绍
CMake 是一个开源、跨平台的构建系统,主要用于软件的构建、测试和打包。
CMake 使用平台无关的配置文件 CMakeLists.txt 来控制软件的编译过程,并生成适用于不同编译器环境的项目文件。例如,它可以生成 Unix 系统的 Makefile、Windows 下的 Visual Studio 项目文件或 Mac 的 Xcode 工程文件,从而简化了跨平台和交叉编译的工作流程。CMake 并不直接构建软件,而是产生标准的构建文件,然后使用这些文件在各自的构建环境中构建软件。
CMake 有以下几个特点:
- 开放源代码:使⽤类 BSD 许可发布
- 跨平台:并可生成编译配置⽂件,在 Linux/Unix 平台,生成 makefile;在苹果平台,可以生成 xcode;在 Windows平台,可以生成 MSVC 的工程文件
- 能够管理大型项目:KDE4 就是最好的证明
- 简化编译构建过程和编译过程:Cmake 的⼯具链非常简单:cmake+make
- 高效率:按照 KDE 官⽅说法,CMake 构建 KDE4 的 kdelibs 要比使用autotools 来构建 KDE3.5.6 的
kdelibs 快 40%,主要是因为 Cmake 在⼯具链中没有 libtool - 可扩展:可以为 cmake 编写特定功能的模块,扩充 cmake 功能
2. CMake 安装
• Ubuntu 22.04 安装 cmake
sudo apt update
sudo apt install cmake
确定 cmake 是否安装成功
cmake --version
查看 cmake 版本,至此,cmake 安装成功。
3. 入门样例 - Hello-world 工程
创建 hello-world 目录, 并在其目录下创建 main.cpp 源文件和 CMakeLists.txt 文件
main.cpp 源文件只是做一个简单的 hello world 打印
#include <iostream>
using namespace std;
int main()
{
std::cout << "hello world" << std::endl;
return 0;
}
CMakeLists.txt 文件如下
cmake_minimum_required(VERSION 3.0)
project(HELLO)
add_executable(hello main.cpp)
此时我们可以使用 cmake 来构建这个工程, 生成 makefile, 从而编译代码。
# cmake 生成 makefile
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# cmake .
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/hello-world
# 使用 makefile 编译代码
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# make
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello
# 运行可执行文件
root@iZ0jlbsky11kph2fx8q9o7Z:~/hello-world# ./hello
hello world
我们来看一下 CMakeLists.txt 文件, 这个文件是 cmake 的构建定义文件, 其文件名是大小写相关的。
下面依次介绍一下在该文件中添加的三个指令:
-
cmake_minimum_required:指定使用的 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>...])
- add_executable:定义工程会生成一个可执行程序
add_executable(可执行程序名 源文件名)
注意:这里的可执行程序名和 project 中的项目名没有任何关系
源文件名可以是一个也可以是多个,如有多个可用空格或;间隔
# 样式 1
add_executable(app test1.c test2.c test3.c)
# 样式 2
add_executable(app test1.c;test2.c;test3.c)
- cmake 命令:将 CMakeLists.txt 文件编辑好之后,就可以执行 cmake 命令了
# cmake 命令原型
cmake CMakeLists.txt 文件所在路径
当执行 cmake 命令之后,CMakeLists.txt 中的命令就会被执行,所以一定要注意给cmake 命令指定路径的时候一定不能出错。