gpt4 book ai didi

c - 发生错误时如何在makefile中同时退出并记录文件中的数据

转载 作者:行者123 更新时间:2023-11-30 16:58:31 32 4
gpt4 key购买 nike

生成文件

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.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 $@; exit $${PIPESTATUS[0]} )

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

关于c - 发生错误时如何在makefile中同时退出并记录文件中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783156/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com