您的位置:首页 > 其它

Makefile(二)-----Makefile中使用变量

2011-08-23 14:01 239 查看
接第一篇,我们可以在makefile中声明变量来替代重复的内容。比如:

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
我们就可以很方便地在我们的makefile中以“$(objects)”的方式来使用这个变量了,于是我们的改良版makefile就变成下面这个样子:

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)


GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。

objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
rm edit $(objects)


“.PHONY”表示,clean是个伪目标文件,伪目标文件在后续介绍。

[.o]和[.h]文件的依赖可以写的更简洁:

$(objects) : defs.h//所以的.o文件都依赖defs.h头文件
kbd.o command.o files.o : command.h//这三个.o文件都依赖command.h
display.o insert.o search.o files.o : buffer.h
.PHONY


补充:

在有些命令之前会有“$(Q)”出现,“$(Q)”的定义如下:

ifeq ($(KBUILD_VERBOSE),1)
quiet =
Q =
else
quiet=quiet_
Q = @
endif


其实就是为空或者"@",在指令前加上它,表示执行命令时,不打印这条命令,当然你可以
"make -s",就是不打印命令,但是这个会将所有的命令都屏蔽掉,想灵活一点就用“@”。

  

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: