c- makefile日志记录,该记录以首次错误停止并显示错误



我正在寻找一种在makefile内记录编译错误的方法,但这是我的问题:

没有日志函数的行如下:

$(OBJ_PATH)/%.obj: $(SRC_PATH_ASW)/%.c
    @echo -Compiling $<:
    $(CC) $(INCLUDE_ASW) $(INCLUDE_ASW_AUTO) $(INCLUDE_BSW) -c $< $(CFLAGS)

我尝试使用以下命令

将stderr和/或stdout重定向和/或stdout
$(OBJ_PATH)/%.obj: $(SRC_PATH_ASW)/%.c
    @echo -Compiling $<:
    $(CC) $(INCLUDE_ASW) $(INCLUDE_ASW_AUTO) $(INCLUDE_BSW) -c $< $(CFLAGS)  > $@.log

此解决方案不会向终端显示消息,而仅在日志文件中显示消息。(我尝试了所有可能的重定向,而没有成功)

我也尝试了T恤,但问题是不同的,实际上,Makefile不会在首先错误中停止,因为Tee命令返回代码始终会成功。

$(OBJ_PATH)/%.obj: $(SRC_PATH_ASW)/%.c
    @echo -Compiling $<:
    $(CC) $(INCLUDE_ASW) $(INCLUDE_ASW_AUTO) $(INCLUDE_BSW) -c $< $(CFLAGS) | tee $@.log

如果可能的话,我想要的是能够将结果记录到文件中并分配给它,但是Makefile在首次编译错误时停止,并且无法继续进行其他文件编译。

谢谢您的支持。

您可以使用set -o pipefailPIPESTATUS[0]

set -o pipefail; $(CC) ... | tee file.log

如果$(CC) ...tee...命令失败,将返回错误。或者,如果您只做

$(CC) ... | tee file.log

然后 ${PIPESTATUS[0]}将是第一个命令($(CC)...)的错误代码(例如,您可以在行末尾粘合一个exit ${PIPESTATUS[0]}

我也经常也想这样做,我想出的解决方案是创建这个短的shell脚本,而别名则可以运行。

#!/bin/sh
make $* | tee make.log

最新更新