在 Linux 环境下,Makefile 是用于自动化编译程序的脚本文件,它定义了源代码与目标文件之间的依赖关系,以及生成目标文件的编译规则。make是一条命令,makefile是一个文件。
目标: 依赖
命令1
命令2
...目标(target):要生成的文件。 依赖(prerequisites):生成目标所需要的文件 命令(commands):生成目标的具体操作(如 gcc 编译命令),必须以 Tab 键开头(不能用空格,这是常见错误) why? (1)语法解析的历史约定,一行中以 Tab 开头的内容被视为编译命令
(2)“目标:依赖” 行(如 app: main.o)和 “命令行”(如 gcc main.o -o app)需要严格区分: a.目标 / 依赖行以非空白字符开头(通常是目标名称); b.命令行必须以 Tab 开头,以此告诉 Make 工具:“这是需要执行的命令”。
依赖关系: mycode: main.cc mycode依赖main.cc
mycode为.exe
依赖方法: g++ main.cc -o mycode


@:指代当前规则的 “目标”; ^:指代当前规则的 “所有依赖”
无需多言:

未使用 .PHONY 修饰

用 .PHONY 修饰,伪目标的特性是,总是被执行的。


CMake 是一个跨平台的、开源的构建自动化工具,用于管理软件编译过程,通过编写简单的配置文件(CMakeLists.txt),可以生成不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)

CMakeLists.txt并编写如下代码:

如下图所示完成 -> mycode.exe
作用:为 C++ 代码的调试模式添加额外编译选项。(CXX代表C++)
CMake 是一个用于生成构建文件(如 Makefile)的工具,侧重于项目的配置和跨平台构建管理; 而 Makefile 是具体指导构建过程的脚本文件,直接与构建工具(make)配合使用来完成项目的编译和链接。
目的相同:都是帮助开发者构建软件项目,将源代码文件编译、链接成可执行文件或库文件,从而实现从代码到可用程序的转化。