2013-02-21 81 views
0

我有一個規則的makefile隱性和顯性規則

*.o: *.c 
    gcc <certain compiler switches> 

我想建立與不同的編譯器開關比標準規則的幾個* .c文件。

我相信,我只是第一個規則

foo.o : foo.c 
foobar.o : foobar.c 
    gcc <other compiler switches> 

前添加是否foo和Foobar的明確的規則重寫*的.o:* .c的規則?

+0

你試過了嗎?問:'<其他編譯器開關>應該應用於'foo.o'還是'foobar.o'? – bobbogo 2013-03-06 17:10:20

+0

是的,foo.o和foobar.o將具有相同的編譯器開關,但不同於* .o:* .c。 – KeithSmith 2013-04-01 14:10:25

回答

0

你的makefile有很多問題。 *.o: *.c使用外殼通配符,幾乎肯定不是你想要的。您可能想使用make通配符編寫模式規則— %.o: %.c。我不喜歡這些(模式規則)。我總是喜歡在我的makefile中非常明確。喜歡的東西:

SRCS := foo.c foobar.c 
OBJS := ${SRCS:%.c=%.o} 

${OBJS}: %.o: %.c 
    gcc ${OPTS-${@D}} $< -o [email protected] 

現在,你認爲合適,您可以定義OPTS-fooOPTS-foobar