Ala*_*air 5 makefile rules targets
我一直在编写一个Makefile来执行一些依赖项生成,我发现自己不得不重复规则,因为(遗留)代码库包含.cpp和.cc文件的混合.看起来有点不雅观.无论如何要指定目标的先决条件可以是文件.cpp还是.cc文件?
所以,而不是:
%.d : %.cpp
$(CPP) -MM $(CPPFLAGS) $<
%.d : %.cc
$(CPP) -MM $(CPPFLAGS) $<
Run Code Online (Sandbox Code Playgroud)
创建没有重复的东西,如:
%.d : %.(cpp | cc)
$(CPP) -MM $(CPPFLAGS) $<
Run Code Online (Sandbox Code Playgroud)
或者这种强制冗余只是GNU Make设计的一个不幸因素?
第一个选项,使用变量定义规则主体一次,并根据需要重用它:
DEPGEN=$(CPP) -MM $(CPPFLAGS) $<
%.d: %.cpp ; $(DEPGEN)
%.d: %.cc ; $(DEPGEN)
Run Code Online (Sandbox Code Playgroud)
第二个选项,用于$(eval)动态生成规则:
$(foreach src,cpp cc,$(eval %.d: %.$(src) ; $$(CPP) -MM $$(CPPFLAGS) $$<))
Run Code Online (Sandbox Code Playgroud)