前言
make
和Makefile
是编译和构建软件项目时非常常用的工具和文件,它们通常配合使用来自动化项目的编译过程。
make
定义:make
是一个构建自动化工具,用于根据项目文件的依赖关系自动完成编译、链接和构建过程。
make
主要用途:
- 编译源代码:自动从源代码生成可执行文件。
- 管理项目依赖:只重新编译那些发生变化的文件,确保编译过程更高效。
- 简化构建任务:把繁琐的编译命令写入
Makefile
,并通过简单的make
命令执行它们
make
的工作方式
Makefile
文件:make
的核心工作是读取一个叫Makefile
的文件,该文件定义了目标(要生成的文件)、它们的依赖关系以及生成它们的命令。- 依赖管理:
- 每个目标文件都有一组依赖和一个生成它的命令。
make
会比较源文件和目标文件的修改时间,如果源文件比目标文件更新,make
就会重新生成目标文件。
- 增量编译:通过判断哪些文件已修改,
make
只重新编译必要的部分。这种特性对于大型项目非常有用,因为它能极大地节省编译时间。
Makefile
定义:Makefile
是一个文本文件,描述了如何构建项目文件的规则、文件之间的依赖关系,以及执行的具体构建命令。
makefile
主要用途:
- 描述整个构建过程,使得
make
工具能够理解如何编译和链接项目。 - 让开发人员能够清晰地看到项目的依赖关系和构建步骤,并且可以在团队中共享。
makefile
基本组成:
- 目标(Target):通常是要生成的文件,例如对象文件或可执行文件。
- 依赖(Dependencies):目标文件所依赖的其他文件,如源文件和头文件。
- 命令(Commands):生成目标文件所需执行的命令。
target: dependencies
command
注意:在命令行前面必须是 TAB 键,这在 Makefile
中是语法上的硬性要求,不能用空格代替。
makefile
示例
code:code.o
g++ -o code code.o
code.o:code.s
g++ -c code.s -o code.o
code.s:code.i
g++ -S code.i -o code.s
code.i:code.cpp
g++ -E code.cpp -o code.i
clean:
rm -rf code code.i code.o code.s