将makefile依赖项标记为可选或不重要

时间:2011-11-17 23:04:57

标签: makefile

我有一个包含以下规则的Makefile:

file.c: filesvn

filesvn: .svn/entries
     action1
     action2

在svn存储库中,这当然可以正常工作。该文件依赖于生活在subversion存储库中。从存储库导出时,这不起作用(没有规则来制作目标...),我想解决这个问题。我试图简单地将以前生成的filesvn版本带到导出的目录中,但Make仍坚持验证filesvn的依赖性。

当然,简单地删除.svn / entries的依赖关系确实有效,但是由于观察修订更新是目标,因此规则的精神被打破了。

有没有办法让Make不在乎.svn / entries文件不存在?

这种技术的优点并不是问题的一部分。我无法从根本上改变这一点,但如果有一种改变可以保持可能有效的精神。答案“你不能”当然是完全有效的。 :)

3 个答案:

答案 0 :(得分:24)

您可以使用wildcard函数忽略该文件,除非它存在:

filesvn: $(wildcard .svn/entries)

除此之外:Subversion 1.7更改了本地工作副本的格式,因此即使在工作副本中,此规则也会停止工作。

答案 1 :(得分:2)

您可以添加一个生成实际makefile副本的目标,其中包含删除svn依赖项的更改,使用make运行make然后删除它。

答案 2 :(得分:1)

模式%规则

对于模式规则,您需要.SECONDEXPANSION

.SECONDEXPANSION:
%.a: %.b $$(wildcard $$*.c)
    cc $< -o $@

另请参阅:How can I make a pattern rule dependency optional in a Makefile?

在Make 4.1中测试。