我正在寻找一种在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 pipefail
或PIPESTATUS[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