复习(二) | 您所在的位置:网站首页 › make工具的工作过程 › 复习(二) |
人们通常利用 make 工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。 Makefilemake 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。 Makefile基本规则 target...:prerequisites... command ...目标(target):程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。 依赖(prerequisites):是用来产生目标的输入文件,一个目标通常依赖于多个文件。 命令(command):是make执行的动作,一个可以有多个命令,每个占一行。注意:每个命令行的起始字符必须为TAB字符! 如果prerequisites中有一个或多个文件更新的话,command就要执行,这就是Makefile最核心的内容 最简单的Makefile例子源文件有: main.c #include int main(){ int a1 = 10, a2 = 20; Swap(a1, a2); printf("swap value : %d ,%d",a1,a2); return 0; }swap.h #ifndef _SWAP_H_ #define _SWAP_H_ void Swap(int *a,int *b); #endifswap.c #include "swap.h" void Swap(int *a,int *b){ int *temp = a; a = b; b = temp; }将源文件放到同一位置后,用vi Makefile (这里M可以不用大写)命令创建Makefile文件并添加内容如下: main:main.o swap.o gcc main.o swap.o -o main //注意空一个tab main.o:main.c swap.h gcc -c main.c -o main.o swap.o:swap.c swap.h gcc -c swap.c -o swap.o clean: rm -f main main.o swap.o添加完并保存后,用 make 编译执行而后生成一个 main 文件,用./main执行。 1、make会在当前目录下找名字叫“Makefile”或“makefile”。 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“main”这个文件,并把这个文件作为最终的目标文件。 3、如果main文件不存在,或是main所依赖的后面的 .o 文件的文件修改时间要比main这个文件新,那么,他就会执行后面所定义的命令来生成main这个文件。 4、如果main所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件make的终极任务,也就是执行文件main了。 常见伪目标.PHONY all: target1 target2 Target1: 执行make all install 执行make install Clean 执行make cleanMakefile使用伪目标: main:main.o swap.o gcc main.o swap.o -o main main.o:main.c swap.h gcc -c main.c -o main.o swap.o:swap.c swap.h gcc -c swap.c -o swap.o .PHONY:clean clean: rm -f main main.o swap.o(注意:同样是写到Makefile文件里,然后执行make,最后执行生成的可执行文件,下文操作方法都一样。) Makefile自动化变量 选项名作用$@规则的目标文件名$ |
CopyRight 2018-2019 实验室设备网 版权所有 |