CMake入门指南
一、CMake入门
1. CMake的由来
Makefile实现了“自动编译”。大多数IDE都有这个工具,比如Linux下的GNU make,Qt的qmake等,这些make工具遵循不同的规范和标准,对应的Makefile文件语法、格式也有不同。这样移植就出现很大问题。如果使用上述make,就需要为每一个平台都写一个Makefile。cmake针对这个问题所诞生。
cmake官网:cmake.org可下载源码。cmake不仅能够实现跨平台编译,而且语法简单。cmake工具会首先解析CMakeLists.txt文件语法规则,再根据当前的编译平台生成本地化的构建文件(如 Makefile、Visual Studio 工程等)。最终仍由对应的构建工具完成编译链接。
cmake命令参考cmake官方培训教程:
https://cmake.org/cmake/help/latest/guide/tutorial/index.html
2. CMake示例
2.0. 快速开始(现代写法)
一个最小而现代的 CMakeLists.txt 建议长这样:
cmake_minimum_required(VERSION 3.16)
project(Hello LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
add_executable(hello
src/main.c
libhello/hello.c
)
# 仅对当前目标生效的“目标化”用法(推荐)
target_include_directories(hello PRIVATE libhello)
# 或声明所需的语言特性(更可取)
target_compile_features(hello PRIVATE c_std_11)
构建与运行(跨平台通用):
# 生成构建目录(out-of-source 构建,推荐)
cmake -S . -B build
# 编译(自动选择合适的构建工具)
cmake --build build -j
# 运行
./build/hello 10 20 # Windows 上可能是 build/Debug/hello.exe
为什么这种写法更现代:
- 使用 out-of-source 构建,源码目录更干净
- 采用 target_* 系列命令(target_include_directories/target_compile_features),作用域清晰、可复用
- 声明所需标准而不是手写全局 CFLAGS,便于不同目标差异化配置
2.1. 多源文件编译示例
建立目录结构:
.
├── CMakeLists.txt
├── build
├── hello.c
├── hello.h
└── main.c
hello.c文件:
#include "hello.h"
void hello(char *str)
{
printf("OutPut str : %s\n", str);
}
int maxNum(int a, int b)
{
return a > b ? a : b;
}
在hello.c头文件声明此函数并包含必要头文件:
hello.h文件:
#ifndef HELLO_H
#define HELLO_H
#include <stdio.h>
void hello(char *str);
int maxNum(int a, int b);
#endif
main.c文件内容:
#include

最低0.47元/天 解锁文章
396

被折叠的 条评论
为什么被折叠?



