简介
Make
make 是一款用于自动化构建流程的工具,核心作用是通过
Makefile文件(由用户自行编写) 定义规则,自动执行编译、链接、测试等重复操作,避免手动输入繁琐命令
[! CMake] CMake 是一款跨平台的构建系统生成工具,它不直接编译代码,而是通过读取
CMakeLists.txt配置文件(由用户自行编写),自动生成适配当前平台的Makefile文件,从而简化跨平台项目的构建流程
简而言之,CMake根据CMakeLists.txt来生成Makefile,而Make是根据Makefile来编译、链接。
CMakeLists.txt的语法更加简洁抽象,相较于Makefile,写起来更加轻松并,且CMake在生成Makefile是基于当前平台,跨平台性好。
CMakeLists.txt编写
CMakeLists的主要任务:
- 编译代码:
add_executable(程序名 源文件)- 链接头文件(.h / .hpp)和库(.a / .so / .dll / .lib):
target_include_directories(程序名 参数 头文件)target_link_libraries(程序名 库名)其他所有设置(路径、变量、选项)都是为这两件事服务的
其中
target_include_directories参数为: PUBLIC、PRIVATE、 PRIVATE
设置变量和路径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