生成文件
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。
为了测试目的,我在可执行文件中创建了一个错误,我试图以不存在的读取模式打开文件。所以我的可执行文件将通过错误,它将出来
当我给
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退出
如果出现错误,则应成功返回第一个makefile。
您的第一个makefile可以使用-
选项调用该makefile ,例如
run_submake:
-$(MAKE) <arguments>
这样,来自子make的错误将被忽略。
您的规则似乎不正确。配方必须产生一个文件(或多个文件)或成为假冒目标。例如,应该有生产status.log
和生产的规则file2.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 $@; exit $${PIPESTATUS[0]} )
file2.txt:
# Add a recipe to produce file2.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句