和Vamei大佬学makefile
在编译一个大型项目的时候,往往有很多目标文件、库文件、头文件以及最终的可执行文件。而不同的文件之间存在依赖关系(dependency),UNIX系统下的make工具用于自动记录和处理文件之间的依赖关系。我们不用输入大量的"gcc"命令,而只需调用make就可以完成整个编译过程。所有的依赖关系都记录在makefile文本文件中。make会自动搜索当前目录下的makefile, Makefile或者GNUmakefile
hello_world_makefie:
#c文件
#include <stdio.h> /* * By Vamei * test.c for makefile demo */ int main() { printf("Hello world!\n"); return 0; }
#makefile
# helloworld is a binary file
helloworld: test.o #target: prerequisite为依赖关系,即目标文件(target)依赖于前提文件(prerequisite)。可以有多个前提文件,用空格分开。
echo "good" gcc -o helloworld test.o #依赖关系后面的<Tab>缩进行是实现依赖关系进行的操作,即正常的UNIX命令 test.o: test.c gcc -c -o test.o test.c
make是一个递归创建的过程:
- Base Case 1: 如果当前依赖关系中没有说明前提文件,那么直接执行操作。
- Base Case 2: 如果当前依赖关系说明了目标文件,而目标文件所需的前提文件已经存在,而且前提文件与上次make时没有发生改变(根据最近写入时间判断),也直接执行该依赖关系的操作。
- 如果当前目标文件依赖关系所需的前提文件不存在,或者前提文件发生改变,那么以前提文件为新的目标文件,寻找依赖关系,创建目标文件。
内部宏:
$@:包含有当前依赖关系的目标文件名
$^: 当前目标的前提文件
$$: 字符"$"
@后的命令将不显示命令本身。-后面的命令将忽略错误(比如删除不存在的文件)。
ref:https://www.cnblogs.com/vamei/archive/2013/04/29/3051062.html
浙公网安备 33010602011771号