Makefile——读《跟我一起写Makafile》

重新回顾一下makefile,打好基础很重要!

1、Makefile的规则

target ... : prerequisites ...
    command
    ...
    ...

target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签(Label)
prerequisites 就是,要生成那个 target 所需要的文件或是目标。
command 也就是 make 需要执行的命令。(任意的 Shell 命令)

依赖关系的实质上就是说明了目标文件是由哪些文件生成的,换言之,目标文件是哪些文件更新的。make 会比较 targets 文件和 prerequisites 文件的修改日期,如果

prerequisites 文件的日期要比 targets 文件的日期要新,或者 target 不存在的话,那么,make 就会执行后续定义的命令。


2、makefile中变量的定义


makefile中变量的定义和bash中变量的定义很像

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
    cc -o edit $(objects)

3、make自动推导


只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,例如make找
到一个whatever.o,那么whatever.c,就会是whatever.o 的依赖文件。

“.PHONY”表示,clean是个伪目标文件。

.PHONY : clean
clean :
    -rm edit $(objects)

rm前面加小减号意思是也许某些文件出现问题,但不要管,继续做后面的事。

Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。

文件搜寻


Makefile文件中的特殊变量“VPATH”可以指定一个或多个目录,当make在当前目录找不到指定的依赖文件和目标文件,就会到VPATH所指定的目录中去找寻文件。
VPATH = src:../headers
上面的的定义指定两个目录,“src”和“../headers”,目录由“冒号”分隔。
另一个设置文件搜索路径的方法是使用make的“vpath”关键字。
1)vpath <pattern> <directories>
为符合模式<pattern>的文件指定搜索目录<directories>。
2)vpath <pattern>
清除符合模式<pattern>的文件的搜索目录。
3)vpath
清除所有已被设置好了的文件搜索目录。

++++++++++++才看到16页,有空继续看呀!!!!

原文地址:https://www.cnblogs.com/bo083/p/2817009.html