2016-08-05 61 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重定向到它。 –