2016-08-05 59 views
0

的makefile如何退出並生成文件在文件在同一時間日誌中的數據發生錯誤時

RUN_EXE = xyz.exe 
SOME_DIR_PATH = ../folder1/ 

ifdef $(MAKECMDGOALS) 
    ifeq ($(MAKECMDGOALS), "target_1") 
     ABC = status.log 
     ARGS_TO_EXE = "argc1" 
    endif 
    ifeq ($(MAKECMDGOALS), "target_1") 
     ABC = file2.txt 
     ARGS_TO_EXE = "argc2" 
    endif 
else 
    ABC = status.log file2.txt 
    ARGS_TO_EXE = "" 
endif 

# phony define 
.PHONY = default target_1 target_2 

# if target not mention run default 
default: $(ABC) 


target_1 target_2:$(ABC) 

$(ABC): 
     $(CD) $(SOME_DIR_PATH) && ($(RUN_EXE) $(ARGS_TO_EXE) || (exit 1;)) 2>&1 | tee -a ../status.log; \ 

我一直在使用的第一makefile文件我正在調用這個Makefile 2個makefile文件。 如果出現一些錯誤,應該成功返回到第一個makefile。

用於測試目的我在可執行文件中創建了一個錯誤,我試圖以不存在的讀取模式打開一個文件。所以我的可執行文件將通過錯誤,它就會出來

當我給

make target_1 

錯誤:錯誤打開文件(用C printf函數,並同樣會在文件中)

make target_2 

錯誤:打開文件時出錯(使用c printf函數,文件也一樣)

但是這裏出現問題

make 

錯誤:打開文件時出錯(使用c printf函數,文件中也一樣)。 錯誤:打開文件時出錯(使用c printf函數,文件也一樣)。

它應該在第一次打印之後退出,併成功登錄status.log文件,但不會發生。 AS $(ABC)包含兩個目標status.log和file2.txt,所以在第一次運行時嘗試構建status.log,然後嘗試構建file2.txt。

但是,有沒有在第一次運行時,它應該返回到第一Makefile和status.log記錄錯誤也,不應該對FILE2.TXT跑出來用1號出口

回答

0

if some error come it should succesfully return to first makefile.

我想如果錯誤

您的第一個生成文件可以使用-選項調用此生成文件,例如

run_submake: 
    -$(MAKE) <arguments> 

這種方式忽略了來自submake的錯誤。


你的規則似乎並不正確。食譜必須產生一個文件(或多個文件)或是假目標。例如,應該有制定status.logfile2.txt的規則。你的makefile應該是這樣的:

RUN_EXE := xyz.exe 
SOME_DIR_PATH := ../folder1/ 
ARGS_TO_EXE := "argc1" 

all : status.log file2.txt # The default target. 
target_1: status.log 
target_2: file2.txt 

.PHONY: all target_1 target_2 

status.log: 
    ${CD} ${SOME_DIR_PATH} && ($(RUN_EXE) $(ARGS_TO_EXE) | tee -a [email protected]; exit $${PIPESTATUS[0]}) 

file2.txt: 
    # Add a recipe to produce file2.txt 
+0

配方不會改變我只有可執行文件的參數正在改變。這就是爲什麼我想堅持單一食譜。 我試過你的食譜,但它不會將生成的錯誤重定向到文件。 –

+0

@RohanG使用'|&'重定向到'tee'而不是'|'將stdout和stderr重定向到它。 –