CMake入门——从零开始学会C/C++项目构建

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值