简介

Make

make 是一款用于自动化构建流程的工具,核心作用是通过 Makefile文件(由用户自行编写) 定义规则,自动执行编译、链接、测试等重复操作,避免手动输入繁琐命令

[! CMake] CMake 是一款跨平台的构建系统生成工具,它不直接编译代码,而是通过读取 CMakeLists.txt 配置文件(由用户自行编写),自动生成适配当前平台的Makefile文件,从而简化跨平台项目的构建流程

简而言之,CMake根据CMakeLists.txt来生成Makefile,而Make是根据Makefile来编译、链接。

CMakeLists.txt的语法更加简洁抽象,相较于Makefile,写起来更加轻松并,且CMake在生成Makefile是基于当前平台,跨平台性好。

CMakeLists.txt编写

CMakeLists的主要任务:

  1. 编译代码:add_executable(程序名 源文件)
  2. 链接头文件(.h / .hpp)和库(.a / .so / .dll / .lib): target_include_directories(程序名 参数 头文件) target_link_libraries(程序名 库名)

其他所有设置(路径、变量、选项)都是为这两件事服务的

其中target_include_directories参数为: PUBLICPRIVATEPRIVATE

设置变量和路径set(变量名 值1 值2 ……)

# 用set定义变量 用${变量名}来使用变量
set(项目名称 “学生管理系统”)
set(源码文件目录 “src”)
set(头文件目录 “include”)
set(源文件列表
	${源码目录}/main.c
	${源码目录}/student.c
	${源码目录}/course.c
)
set (链接列表
	m
	pthread
)
 
add_executable(${项目名称} ${源文件列表})
target_include_directories()
 
 

CMake的使用---终端

不同环境下的执行指令有所不同 以下适用于 Windows 下的 MinGW 编译器

生成构建文件

cmake -S . -B build -G "MinGW Makefiles"
  • -S .-S 用于指定源代码目录(即 CMakeLists.txt 所在的目录),. 表示当前终端所在目录。
  • -B build-B 用于指定构建目录(存放生成的构建文件和编译产物),build 表示在当前目录下创建一个名为 build 的文件夹作为构建目录(若不存在会自动创建)。
  • -G "MinGW Makefiles"-G 用于指定生成器,这里明确指定生成 MinGW 兼容的 Makefile(适用于 Windows 下的 MinGW 编译器)

[!注意] 使用 CMake 生成 Makefile 后,后续修改 .c 源文件时,直接运行 make 命令即可重新编译,无需再次运行 cmake 生成 Makefile

只有当你修改了 CMake 配置文件(如 CMakeLists.txt)、添加 / 删除源文件、修改编译选项等影响构建规则的内容时,才需要重新运行 cmake 生成新的 Makefile