/***********************************************/
= 递归展开变量
:= 立即展开变量
---------------------------------------------------
$@ 表示一个规则中的目标文件(*.o文件)
file1.o file2.o:head.h
cp $@ /backup
相当于 file1.o:file1.c head.h
cp $@ /backup
gcc -c file1.c -o file1.o
file2.o:file2.c head.h
cp $@ /backup
gcc -c file2.c -o file2.o
--------------------------------------------------
$% 当规则的目标文件是一个静态库文件时,$%代表静态库中的一个成员名。
如某条规则 的目标是 foo.a(bar.o), 则$%的值是bar.o,而$@的值是foo.a
----------------------------------------------------
$< 规则中的第一个依赖文件名。如果使用了隐含规则,那么&<的值为由隐含规则引入的第一个依赖文件名。
file1.o file2.o:head.h
cp $@ /backup
当file1.o过时时,该规则相当于:
file1.o:file1.c head.h
cp $@ /backup
gcc -o file1.o -c file1.c
----------------------------------------------------
$> 与$%一样,只适用于库文件名,它的值是库名。
----------------------------------------------------
$? 所有比目标文件新的依赖文件列表,以空格分开。如果目标是静态库文件名,代表的是库成员(.o文件)
-----------------------------------------------------
$^ 规则的所用依赖文件列表,使用空格分开;如一个文件在依赖文件中出现多次,只列出一次;
-----------------------------------------------------
$+ 规则的所用依赖文件列表,使用空格分开;如一个文件在依赖文件中出现多次,列出多次;
-----------------------------------------------------
$* 目标文件去掉后缀后的名称。如某个规则的目标文件是 file.o,则 $* 是 file
file1.o file2.l:head.h
gcc -c $* -o $@
-----------------------------------------------------
以上自动变量只适用于命令中,不能用在目标文件和依赖文件中,如想用在目标文件和依赖文件中,则前再加一个$
如:
file1.o file2.o:$$.c head.h
gcc -o $*.o -c $@
运行make,解释含用隐含规则的mikefile时,当处理的目标文件为file1.o时,$$*和$*代表file1;
当处理的目标文件是file2.o时,$$*和$*代表file2
相当于:
file1.o:$$*.c head.h
gcc -c $*.c -o $@
file2.o:$$* head.h
gcc -c $*.c -o $@
或者:
file1.o:file1.c head.h
gcc -c file1.c -o file2.o
file2.o:file2.c head.h
gcc -c file2.c -o file2.o
------------------------------------------------------
makefile自动变量
最新推荐文章于 2023-12-31 20:38:41 发布