Makefile内容总共分为5类,外加一些零散的知识,本章不包含自动依赖,自动依赖将在单独的文章中说明
1,显示规则
目标: 依赖
[TAB]命令
2,隐晦规则
%.o : %.c
[TAB]$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
把所有的[.c]文件都编译成[.o]文件.
作为模式规则的目标。不会被当做最终目标。
3,变量定义
变量定义
x=.........用等号定义一个变量
x:=.......用:=定义一个变量,好处是这种方法不能利用后定义的变量
x?=......如果x被定义过,这条语句什么也不做,如果没被定义则定义x 变量取值 $(x) 得到x的值
x = y
y = z
a := $($(x))
结果
a=z
模式变量
%.o : CFLAGS = -O 给所有.o文件加上模式-o
4,文件指示
5,注释
6,其他
6.1 指定Makefile文件 make -f MyMakefile
6.2 指定搜索路径 vpath <pattern> <directories> 如vpath %.h ../headers,指定.h文件到../headers目录中寻找
可以连续指定,搜索顺序和指定顺序相同,如
vpath %.c foo
vpath % blish
vpath %.c bar
6.3伪目标 .PHONY:xxxx声明一个xxxx的伪目标
6.4静态模式
<targets ...>: <target-pattern>: <prereq-patterns ...>
<commands>
<target>集合中都是以“.o”结尾的,而如果我们的<prereq-parrterns>定义成“%.c”,意思是对<target-parrtern>所形成的目标集进行二次定义,其计算方法是,取<target-parrtern>模式中的“%”(也就是去掉了[.o]这个结尾),并为其加上[.c]这个结尾,形成的新集合。
如 foo.o bar.o:%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
------------------------------------
参考 陈皓 跟我一起写Makefile
http://blog.chinaunix.net/u1/35065/showart_2311800.html makefile学习