2016-01-13 66 views
1

我有一个具有以下模式规则以创建一个隐含的规则生成文件:的Makefile模式规则被发现,但配方不运行

%.cpp: 
    $(warning foo) 

当我检查的make -d输出我看到这种隐含规则找到并匹配文件。我验证当我删除模式规则时,make -d的输出不再显示匹配。但是,即使找到隐式规则,警告也不会显示出来。 虽然隐式规则匹配,但配方未运行。

什么给?

+0

这里你的实际目标是什么? –

+0

我的目标是指定一个配方来运行所有.cpp文件作为先决条件。 – aardvarkk

+0

即使对于存在的'.cpp'文件,你也想运行规则?然后你需要说服它做到这一点,即使它们是最新的。看[强制目标](http://www.gnu.org/software/make/manual/make.html#Force-Targets)。 –

回答

1

该配方告诉如何创建 a %.cpp文件(并没有给它任何先决条件)。

你什么时候期待它被运行?

它不会为任何现有的*.cpp文件运行,因为缺少先决条件意味着认为文件是最新的。

尝试运行make totally-doesnt-exist.cpp,您应该看到警告。

+0

是的,你很好地阐明了我认为我会犯错的地方。我认为,我已经将依赖观念向后倒了一些。我试图指定给定某个目标的对象,但是除非先决条件较新(其中没有!),否则它不会被执行。我应该关注输出的.o文件,而不是源代码.cpp文件。 – aardvarkk

+1

对,使* *输出*目标不是输入文件。输入用于在不同的匹配规则之间进行选择并创建规则链等。 –