makefile 多行注释_makefile 如何注释_makefile注释(3)

电脑杂谈  发布时间:2017-04-11 05:09:03  来源:网络整理

x = foo
y = $(x) bar
x = xyz

在上例中,y的值将会是 xyz bar,而不是 foo bar 。

(2)“:=”

“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

x := foo
y := $(x) bar
x := xyz

在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。

不一定,可以不包含进去。makefile是根据依赖项是否被修改决定是否重新执行command。如果不把头文件写入依赖项中,则面临的风险就是修改了头文件,目标文件不会被重新编译。我们的原则是,自己定义的头文件写入依赖项,库的头文件无需包含,除非你要修改库的头文件。

VPATH是makefile的特殊变量,只能用来指明makefile寻找目标文件的依赖项所在的目录,不能帮助编译器寻找所需编译的文件。

vpath是makefile的关键字,VPATH是makefile的特殊变量,两者的区别在于VPATH指定全局的搜索路径,而vpath可以针对特定的文件搜索路径。

vpath命令有三种形式:

vpath pattern path : 符合pattern的文件在path目录搜索。

vpath pattern : 清除pattern指定的文件搜索路径

vpath : 清除所有文件搜索路径。

例如:

vpath %.h ./include //指定.h类型文件的搜索路径是include
vpath %.cpp ./src   //指定.cpp类型文件的搜索路径是src

make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果。

替换变量中指定的内容有两种方式。makefile 多行注释

(1)模式匹配替换字符串函数patsubst

用法如下:

res=$(patsubst %.c,%.o,$(var) )

以上表示将变量$(var)中所有以.c结尾的字符串变成.o结尾。patsubst的英文全称是pattern substitute string,是三个单词的前三个或两个字母拼接组成的名字。

(2)使用变量的替换引用

这里用到makefile里的替换引用规则,即用指定的变量替换另一个变量。其的用法格式如下:

res=$(var:%.a=%.b) 

例如:

foo:=a.c b.c
bar=$(foo:%.a=%.o)

那么bar就变成了a.o b.o。

以上表示将变量foo中以.a结尾的字符串替换成.b结尾并返回结果。注意,字符串处理函数并不会改变原有的字符串,变量的替换引用规则也不会改变原来字符串。实际上变量的替换引用是模式匹配替换函数patsubst的一个简化实现。

$@,$^,$<代表的意义分别是:

$@:目标文件;

$^:所有的依赖文件;

$<:第一个依赖文件。makefile 多行注释

通过以上特殊变量,可以简化Makefile。例如:

main:main.o mytool1.o mytool2.o
gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h
gcc -c $<
$(Target):$(OS) 
    $(MAKE) -C $(SUBDIR)

#或者
$(Target):$(OS)
     cd subdir && $(MAKE) 

解释:当生成target目标对象时,会执行$(MAKE) -C $(SUBDIR)这条命令,进入目录ODIR,该目录下有一个makefile,并执行。其中,$(MAKE) 值make预定义的变量,一般指的就是make,无需修改,可通过make -p查看make所有的预定义的变量。当然,也可直接指明为make,即make -C $(SUBDIR)。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40643-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...