举例说明递归展开与简单方式定义的区别:
CFLAGS:=-Wall CFLAGS:=$(CFLAGS) all: echo $(CFLAGS) 对于以上Makefile,执行make后echo输出-Wall CFLAGS=-Wall CFLAGS=$(CFLAGS) all: echo $(CFLAGS) 执行make后echo输出:Makefile:2:***Recursive variable `CFLAGS
GNU make 的主要预定义变量:
预定义变量 含义
$* 不包含扩展名的目标文件名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称。
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR 归档维护程序的名称,默认值为 ar。
ARFLAGS 归档维护程序的选项。
AS 汇编程序的名称,默认值为 as。
ASFLAGS 汇编程序的选项。
CC C 编译器的名称,默认值为 cc。
CCFLAGS C 编译器的选项。
CPP C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS C 预编译的选项。
CXX C++ 编译器的名称,默认值为 g++。
CXXFLAGS C++ 编译器的选项。
FC FORTRAN 编译器的名称,默认值为 f77。
FFLAGS FORTRAN 编译器的选项。
参考:http://www.aka.org.cn/Lectures/001/Lecture-1/make.html
http://hi.chinaunix.net/?uid-14782631-action-viewspace-itemid-10165
http://www.sudu.cn/info/html/edu/20080407/264139.html
http://blog.csdn.net/lijierson8/article/details/6283040
http://www.worldhello.net/doc/makefile_howto/makefile_howto.mm.htm
经典的shell教程:《Linux Shell Scripting with Bash》—Ken O.Brutch的翻译
使用Bash编写Linux Shell脚本-6.表达式
陈皓专栏:
http://blog.csdn.net/haoel
http://coolshell.cn/
经典的makefile教程:跟我一起写makefile
http://blog.csdn.net/haoel/article/details/2886(http://www.chinaunix.net/jh/23/408225.html)
+
http://wenku.baidu.com/view/4a171e6a25c52cc58bd6be6b.html
GCC常用编译选项:优化选项的功能
http://blog.csdn.net/iterzebra/article/details/6203067