我有一个具有以下模式规则以创建一个隐含的规则生成文件:的Makefile模式规则被发现,但配方不运行
%.cpp:
$(warning foo)
当我检查的make -d
输出我看到这种隐含规则找到并匹配文件。我验证当我删除模式规则时,make -d
的输出不再显示匹配。但是,即使找到隐式规则,警告也不会显示出来。 虽然隐式规则匹配,但配方未运行。
什么给?
我有一个具有以下模式规则以创建一个隐含的规则生成文件:的Makefile模式规则被发现,但配方不运行
%.cpp:
$(warning foo)
当我检查的make -d
输出我看到这种隐含规则找到并匹配文件。我验证当我删除模式规则时,make -d
的输出不再显示匹配。但是,即使找到隐式规则,警告也不会显示出来。 虽然隐式规则匹配,但配方未运行。
什么给?
该配方告诉如何创建 a %.cpp
文件(并没有给它任何先决条件)。
你什么时候期待它被运行?
它不会为任何现有的*.cpp
文件运行,因为缺少先决条件意味着认为文件是最新的。
尝试运行make totally-doesnt-exist.cpp
,您应该看到警告。
是的,你很好地阐明了我认为我会犯错的地方。我认为,我已经将依赖观念向后倒了一些。我试图指定给定某个目标的对象,但是除非先决条件较新(其中没有!),否则它不会被执行。我应该关注输出的.o文件,而不是源代码.cpp文件。 – aardvarkk
对,使* *输出*目标不是输入文件。输入用于在不同的匹配规则之间进行选择并创建规则链等。 –
这里你的实际目标是什么? –
我的目标是指定一个配方来运行所有.cpp文件作为先决条件。 – aardvarkk
即使对于存在的'.cpp'文件,你也想运行规则?然后你需要说服它做到这一点,即使它们是最新的。看[强制目标](http://www.gnu.org/software/make/manual/make.html#Force-Targets)。 –