基本上,如果我有一个已经有规则但仍与另一个模式隐式规则匹配的目标。 make如何处理这种情况?
targ.bin :: dep
dep: some-req
some rules
%.bin : some-reqs
some rules
在这种情况下,两个规则都适用于targ.bin吗?意思是,将dep与其先决条件和规则一起调用,然后执行%.bin模式隐式先决条件和规则吗?
答案 0 :(得分:1)
请参阅GNU Make手册4.13 Double-Colon Rules, 特别是:
每个双冒号规则都应指定一个配方;如果不适用,则将应用一个隐式规则。请参阅使用隐式规则。
您的双冒号规则:
targ.bin :: dep
没有食谱。因此,它仅表示依赖项targ.bin
-> dep
和隐式规则:
%.bin : some-reqs
some rules
通过执行以下命令来指定targ.bin
为最新版本:
some rules
以及暗示依赖性targ.bin
-> some-reqs
。
Make结合了目标targ.bin
的所有先决条件。因此,您的Makefile表示:
dep: some-req
some rules
targ.bin : some-reqs dep
some rules
是targ.bin
的完整食谱。
制作文件
targ.bin :: dep
dep: a
echo '$@ -> $^'
%.bin : b
echo '$@ -> $^'
运行方式:
$ touch a b
$ make
echo 'dep -> a'
dep -> a
echo 'targ.bin -> b dep'
targ.bin -> b dep
稍后
假设在示例中您提供的双冒号规则有一个配方,这是否意味着隐式规则将不适用?
请参见10.1 Using Implicit Rules,尤其是:
通常,搜索每个目标和每个没有配方的双冒号规则的隐式规则。
是的,如果双冒号规则具有配方,则隐式规则将不适用。我把实验留给你。