2010-01-28 46 views
0

我已經發布了我的makefile的相關位。當我在此生成文件上運行make all時,在編譯debugosd.o時出現編譯錯誤。但是,因爲make找到了以前建造的debugosd.o,它只是繼續構建dialup.otz如何編譯一個依賴失敗時強制退出?

沒有刪除所有的.o's,我如何強制debugosd.o變得過時 - 所以強制make一旦遇到debugosd.o中的編譯錯誤就會停止運行?

構建.o文件的規則是:

%.o: %.c 
    $(TITLE) 
    $(CC) $(COMPILE) $(C_OPTIONS) -c $< 

而且makefile的片段是:

all: shared0.flw shared1.flw shared2.flw shared3.flw 

debugosd.o: debugosd.c debugosd.h 
xdialler_interface_new.o: xdialler_interface.h 
dialup.ooo: xdialler_interface_new.o debugosd.o xDialler.a 
    $(TITLE) 
    $(MAKE_OOO) 

dialup.otz: dialup.ooo 
    $(BIN)opress $< 

shared1.dir: dialup.otz 
    $(TITLE) 
    $(BIN)dirbuild $(SHAREDDIR1_OPTIONS) 

shared1.flw: shared1.dir 
    $(TITLE) 
    $(BIN)flwbuild $(SHAREDFLW_OPTIONS1) 

其實,我想通了什麼問題了。我使用虛假目標強制重建shared1.flw。我認爲這是迫使make繼續不管錯誤。

+0

奇怪的是,我以爲make就已經這樣做了。 – Pace 2010-01-28 14:19:14

+0

是的,我也是 - 繼續構建shared2.flw和shared3.flw。 – BeeBand 2010-01-28 14:25:36

回答

1

您沒有列出debugosd.o的特定子命令,所以我假設它使用默認值,某處(如.c.o)。

如果任何子命令返回非零退出代碼,應該退出,除非該命令以-開頭。檢查用於dubugosd.o目標的實際命令。

是否有先前建立的文件不應該有問題,make應該在出錯條件後進行。