2010-10-03 83 views
5

我有一个BSDmakefile和GNUmakefile,除了依赖管理外,它们几乎完全相同。BSD Make和GNU Make兼容的makefile

的GNUmakefile:

ifneq ($(MAKECMDGOALS), "clean") 
-include $(dependencies) 
endif 

的BSDmakefile:

.for i in $(dependencies) 
.sinclude "${i}" 
.endfor 

有没有办法让这个我可以检测,如果我下使用gmake或bsdmake运行,然后执行相应的包括基于此的陈述?我记得看到有人利用两个生成文件处理器中的一个怪癖,以便他们可以实现类似的效果。

或者,如果有比这更好的方法,我想知道! (切换到SCons或CMake不合适!)

谢谢!

+1

我不知道你为什么要这样做:为什么不只是需要'gmake'或'bmake'到处?如果你想要可移植,你可以使用'automake'并把细节留给它。很多项目都有足够的时间来完成一个单一的构建系统,更不用说了。0 – 2010-10-03 23:26:08

回答

8

你可以把你的GNU特定的东西放在GNUmakefile中,你的BSD特定的东西放在BSDmakefile中,而你的常用东西放在一个名为Makefile.common或类似的文件中。然后在其他两个的每一个的开始处包括Makefile.common。缺点是,现在你有3个生成文件,而不是2个。上面,你只会编辑1.

+1

你的“缺点”就像是说将10,000个LOC文件分割成逻辑相关的单元有着产生多个源文件的缺点。 – 2010-10-03 23:24:49

+2

@杰克凯利:但确实如此。 :) – 2010-10-04 11:15:15