makefile内置符号
特殊符号
Makefile中的四个有用的特殊符号意义和使用,分别是@、$@、$^、$<
@
这个符串通常用在“规则”行中,表示不显示命令本身,而只显示它的结果,例如Makefile中的内容为:
DIR_OBJ=./obj
CMD_MKOBJDIR=if [ -d ${DIR_OBJ} ]; then exit 0; else mkdir ${DIR_OBJ}; fi
mkobjdir:
@${CMD_MKOBJDIR}
此时不会显示在命令行不会显示出if [ -d ${DIR_OBJ} ]; then exit 0; else mkdir ${DIR_OBJ}; fi
,但如果规则行的TAB后没有以@开头,则会显示。
$@
$^
$<
这三个分别表示:
$@
代表目标文件(target)$^
代表所有的依赖文件(components)$<
-代表第一个依赖文件(components中最左边的那个)。
使用上面三个变量,那么简化的Makefile文件为:
main.out:main.o line1.o line2.o
g++ -o $@ $^
main.o:main.c line1.h line2.h
g++ -c $<
line1.o:line1.c line1.h
g++ -c $<
line2.o:line2.c line2.h
g++ -c $<
makefile中预定义变量
预定义变量:
$*
不包含扩展名的目标文件名称。$+
所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$<
第一个依赖文件的名称。$?
所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$@
目标的完整名称。$^
所有的依赖文件,以空格分开,不包含重复的依赖文件。$%
如果目标是归档成员,则该变量表示目标的归档成员名称。 例如,如果目标名称 为 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 编译器的选项。
常见赋值操作的含义
常见赋值操作:
=
是最基本的赋值:=
是覆盖之前的值?=
是如果没有被赋值过就赋予等号后面的值+=
是添加等号后面的值