2012-11-14 65 views
3

我目前有一个Makefile,它处理可以单独构建的一小组文件。每组3个文件的命名方案和结构是相同的;头文件,实现和测试驱动程序。我将会有大约4个组,比如下面的3组。减少Makefile冗余

什么是一些不太多余的方式来构建这个Makefile,以避免每个组的重复性?

flextest: flex_test.o flex.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 
flex_test.o: flex_test.c flex.o minunit.h 
    $(CC) $(CFLAGS) -c $< 
flex.o: flex.c flex.h debug.h 
    $(CC) $(CFLAGS) -c $< 

skiptest: skip_test.o skip.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 
skip_test.o: skip_test.c skip.o minunit.h 
    $(CC) $(CFLAGS) -c $< 
skip.o: skip.c skip.h debug.h 
    $(CC) $(CFLAGS) -c $< 

dynatest: dyna_test.o dyna.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 
dyna_test.o: dyna_test.c dyna.o minunit.h 
    $(CC) $(CFLAGS) -c $< 
dyna.o: dyna.c dyna.h debug.h 
    $(CC) $(CFLAGS) -c $< 
+0

您使用的是GNU make或其他实现吗?你需要你的makefile来处理其他的实现吗? –

+0

GNU make,3.81。 – enjoylife

回答

3

如果您和任何其他使用此makefile的人使用GNU make,您可以花费大量的快捷方式。像这样的东西应该工作:

%test: %_test.o %.o 
%_test.o: minunit.h 
%.o: %.h debug.h 

all: flextest skiptest dynatest 
+0

我可以重命名,但是与当前的命名方案有冲突吗? – enjoylife

+0

例如,'flex_test.o'匹配'%_test.o'和'%.o'。我不知道如何处理如此重叠的规则。你可以尝试一下,看看我是否正确。 :-) –

+1

它会工作; GNUMake选择需要最短词干的规则,即''''与'flex'而不是'flex_test'匹配的规则。 – Beta