2012-05-10 77 views
0

堆栈!Makefile:删除没有依赖关系的中间文件

孜孜以求的实验和搜索没有找到任何解决这个看似简单的问题。

在我的build中,.cc文件依赖于.proto文件。在make过程中,.proto文件被转换成.cc和.h文件,然后收集并构建到可执行文件中。

如何确保在删除.proto文件时,相应的中间.cc文件会在make过程中自动删除? (如果不是,它会进入构建的下一个阶段,并且在过去造成了问题。)

现在,我只是在删除所有生成的.cc/.h文件时删除或重命名一个.proto--这是正确的,但触发几乎整个系统的重建。

在此先感谢...!

+0

如果Make完成后立即删除生成的文件(即完成可执行文件的生成时),就足够了吗?直到/除非.proto文件中的一个比可执行文件更新,否则不会重新生成它们。 – Beta

+0

好问题 - 不幸的是,答案是“不是真的”。我经常在IDE(即XCode或Visual Studio 2010)中运行程序 - 它需要在那里有中间的.cc文件。制作阶段只是为此做好准备。 –

+0

有趣...哪个版本的Make? – Beta

回答

1

你可以写像clean的规则,但不那么严格:

SOURCES = $(PROTOS:.proto=.cc) 

.PHONY: tidy 
tidy: 
     @rm $(filter-out $(SOURCES), $(wildcard *.cc)) 

然后,您可以手动启动该规则,或使其可执行的命令,唯一的先决条件。

或者你可以在你的可执行文件的规则中放入相同的命令,但这样做有点不雅。

+0

哦,这看起来非常可行。事实上,我的makefile实际上并不直接生成可执行文件 - 它会调用XCode或VisualStudio来完成构建的这部分内容,因此将该规则放在该位置实际上非常简洁 - “整理在转移到构建阶段之前“。谢谢! –