CMake是一个跨平台的自动化构建系统,它使用一个名为CMakeLists.txt的文件来描述构建过程,可以生成标准的构建文件,如Unix的Makefile或Windows Visual Studio的工程文件。CMake支持多种编程语言,主要是C、C++,但也支持Fortran等。与传统的构建系统相比,CMake的一个主要优势是它能够管理大型项目中复杂的构建过程。
安装CMake
安装CMake的过程会根据你所使用的操作系统而有所不同。以下是针对常见操作系统的CMake安装指南。
Windows
- 访问CMake的官方下载页面。
- 在“Binary distributions”部分找到适用于Windows的安装程序,例如
cmake-3.28.3-windows-x86_64.msi(版本号可能不同)。 - 下载安装程序后,双击运行。
- 跟随安装向导的指示完成安装。在安装过程中,可以选择是否将CMake添加到系统的PATH环境变量中。推荐添加到PATH中,这样可以从任意位置访问CMake命令。
macOS
在macOS上,可以通过Homebrew包管理器来安装CMake。
- 打开终端。
- 如果尚未安装Homebrew,可以通过在终端中运行以下命令来安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - 使用Homebrew安装CMake:
brew install cmake
Linux
在基于Debian的Linux发行版(如Ubuntu)上,可以使用apt包管理器安装CMake。
- 打开终端。
- 首先更新软件包列表:
sudo apt update - 安装CMake:
sudo apt install cmake
对于基于Red Hat的发行版(如Fedora或CentOS),可以使用dnf(或yum,取决于发行版)来安装CMake:
sudo dnf install cmake
或者:
sudo yum install cmake
验证安装
安装完成后,可以在终端或命令提示符中运行以下命令来验证CMake是否正确安装:
cmake --version
如果CMake已正确安装,该命令将输出CMake的版本信息。
注释
单行注释
单行注释以#字符开始,直到该行结束。任何#后面的内容都会被CMake解释器忽略。
# 这是一个单行注释
# 设置最小CMake版本要求
cmake_minimum_required(VERSION 3.10)
# 设置项目名称
project(MyProject)
块注释
CMake 3.0及以上版本支持使用块注释来实现多行注释。块注释以#[[开始,并以]]结束。在这两个标记之间的所有内容都被CMake视为注释,将被忽略。
#[[
这是一个多行注释的例子。
所有这些行都将被CMake忽略。
]]
cmake_minimum_required(VERSION 3.10)
project(MyProject)
# 单行注释还是像以前一样工作
set(CMAKE_CXX_STANDARD 11)
块注释是在CMake 3.0中引入的,所以如果你在使用较旧版本的CMake,这个功能将不可用。
示例
标记TODO和FIXME:使用注释来标记需要进一步工作(TODO)或需要修复的问题(FIXME)。
# TODO: 添加对其他平台的支持
if(WIN32)
# 特定于Windows平台的设置
endif()
# FIXME: 这里有一个链接问题需要解决
target_link_libraries(MyExecutable SomeLibrary)
快速上手
假设你有一个简单的C语言项目,目录结构如下:
MyProject/
├── CMakeLists.txt
├── add.c
├── div.c
├── head.h
├── main.c
├── mult.c
└── sub.c
head.h
#ifndef _HEAD_H
#define _HEAD_H
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法
double divide(int a, int b);
#endif
add.c
#include <stdio.h>
#include "head.h"
int add(int a, int b)
{
return a + b;
}
div.c
#include <stdio.h>
#include "head.h"
double divide(int a, int b)
{
return (double)a / b;
}
mult.c
#include <stdio.h>
#include "head.h"
int multiply(int a, int b)
{
return a * b;
}
sub.c
#include <stdio.h>
#include "head.h"
int subtract(int a, int b)
{
return a - b;
}
main.c
#include <stdio.h>
#include "head.h"
int main()
{
int a = 20;
int b = 12;
printf("a = %d, b = %d\n", a, b);
printf("a + b = %d\n", add(a, b));
printf("a - b = %d\n", subtract(a, b));
printf("a * b = %d\n", multiply(a, b));
printf("a / b = %f\n", divide(a, b));
return 0;
}
编写CMakeLists.txt
CMakeLists.txt定义了项目的构建规则。
cmake_minimum_required(VERSION 3.10)
# 设置项目名称和版本
project(MyProject VERSION 1.0)
# 指定C标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)
# 添加可执行文件
add_executable(app main.c add.c div.c mult.c sub.c)
这个文件首先声明了CMake的最低版本要求,然后设置了项目的名称和版本。接着,它设置了C语言的标准,并且指示CMake添加一个可执行文件app,该可执行文件是从main.c源文件构建的,add.c、div.c、mult.c、sub.c和main.c都将被编译,并且add、subtract、multiply、divide这些函数的定义将被包含在最终的可执行文件中。
构建项目
在项目目录(即CMakeLists.txt所在的目录)中,运行以下命令来构建你的项目:
- 创建一个构建目录并进入:
mkdir build
- 运行CMake来配置项目并生成Release版本构建系统:
cmake -S . -B build
- 构建项目:
cmake --build build
如果一切顺利,这将在build目录中生成app可执行文件。