生成文件
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,我正在调用此 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 并使用 exit 1 出来
最佳答案
if some error come it should succesfully return to first makefile.
您的第一个 makefile 可以使用 -
选项调用此 makefile,例如
run_submake:
-$(MAKE) <arguments>
这样,来自子制作的错误就会被忽略。
<小时/>你的规则似乎不正确。配方必须生成一个文件(或多个文件)或者是虚假目标。例如,应该有生成 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
关于c - 发生错误时如何在makefile中同时退出并记录文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783156/