Makefile日志记录在第一次出错时停止并显示错误

时间:2017-03-09 16:08:24

标签: c logging makefile

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

没有日志功能的行如下:

AppComponent

我尝试使用以下命令将stderr和/或stdout重定向到日志文件中

constructor(private _router: Router) {
  this._router.events.pairwise().subscribe((event) => {
    console.log(event);
  });
}

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

我也试过tee但是问题不同,实际上makefile在第一次出错时不会停止,因为tee命令返回码总是会成功。

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

如果可能的话,我想要的是能够将编译结果记录到文件中以及显示它,但是makefile在第一次编译错误时停止并且不继续其他文件编译。

感谢您的支持。

2 个答案:

答案 0 :(得分:0)

我也经常想要这样做,我想出的解决方案是创建这个简短的shell脚本,别名make来运行它。

#!/bin/sh

make $* | tee make.log

答案 1 :(得分:0)

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

set -o pipefail; $(CC) ... | tee file.log
如果$(CC) ...tee...命令失败,

将返回错误。或者,如果你只是做

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

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