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

标签 c bash unix 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,我正在调用此 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/

相关文章:

linux - 在 shell 脚本中通过变量引用文件路径

c - Xplained pro SAM4SD32C - 定时器 1 - 无法写入 RA 寄存器

python - 这个 PyList_New、PyList_SET_ITEM、Py_BuildValue 组合是否泄漏?

linux - 如何使 echo 与 bash 中的 read 兼容?

linux - 如何从网页中提取数据(用户名)

java - 保存 .java 文件时出现权限错误

linux - 预计无法在我的 Bash 脚本中运行

c - 将 0 与 NULL 分配给 C 中的指针

c - 对称加密 key 交换和存储?

linux - 直bash空参数无法识别