作者:追梦的青春灬_176 | 来源:互联网 | 2023-09-24 18:08
https://www.cnblogs.com/sky-heaven/p/9450435.html
Makefile一般的格式是:
target:components
rule
一、@
这个符串通常用在“规则”行中,表示不显示命令本身,而只显示它的结果,例如Makefile中的内容为:
DIR_OBJ=./obj
CMD_MKOBJDIR=if [ -d ${DIR_OBJ} ]; then exit 0; else mkdir ${DIR_OBJ}; fi
mkobjdir:
@${CMD_MKOBJDIR}
命令行执行如下:
make mkobjdir
此时不会显示在命令行不会显示出if [ -d ${DIR_OBJ} ]; then exit 0; else mkdir ${DIR_OBJ}; fi,但如果规则行的TAB后没有以@开头,则会显示,不信可以试试。
二、$@、$^、$<
这三个分别表示:
$@ --代表目标文件(target)
$^ --代表所有的依赖文件(components)
$< --代表第一个依赖文件(components中最左边的那个)。
$? --代表示比目标还要新的依赖文件列表。以空格分隔。
$% --仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。
三
' - ' 符号的使用
通常删除,创建文件如果碰到文件不存在或者已经创建,那么希望忽略掉这个错误,继续执行,就可以在命令前面添加 -,
-rm dir;
-mkdir aaadir;
' $ '符号的使用
美元符号$,主要扩展打开makefile中定义的变量
' $$ '符号的使用
$$ 符号主要扩展打开makefile中定义的shell变量
例如:
@for dir in
$(subdirs); do \
@echo -------compiling $$dir-----------; \
$(MAKE) -C
done
以上subdir属于makefile中定义的变量,用$
dir则属于makefile中定义的shell变量,所有使用是使用 ‘ $$ ’ 而不是 ' $ '