如何在Makefile中仅在编译出错时显示执行的GCC命令?
实现方案
可以通过Shell条件逻辑结合Make的命令隐藏特性来实现需求:正常编译时隐藏命令输出,仅在失败时打印对应的GCC执行命令,同时保留错误信息。
修改后的Makefile规则
#================================== # Text formatting for better output OK = "$@ \033[32;1m\xE2\x9C\x94\033[0m" %.o: %.c @$(GCC) $(CFLAGS) $< -o $@ || (echo "编译失败,执行命令: $(GCC) $(CFLAGS) $< -o $@" && false) @echo -e $(OK)
逻辑说明
@前缀:隐藏正常执行的命令输出,避免终端打印冗余编译指令。||逻辑或:仅当GCC返回非0错误码时,执行后续命令块。(echo ... && false):编译失败时先打印完整的GCC执行命令,再通过false返回错误状态,让Make终止流程并标记目标构建失败。- 编译成功时,会跳过
||后的逻辑,直接打印成功标识。
如果需要更灵活的复用逻辑,也可以用Shell变量存储命令:
#================================== # Text formatting for better output OK = "$@ \033[32;1m\xE2\x9C\x94\033[0m" %.o: %.c @COMPILE_CMD='$(GCC) $(CFLAGS) $< -o $@'; \ $$COMPILE_CMD; \ if [ $$? -ne 0 ]; then \ echo "编译失败,执行命令: $$COMPILE_CMD"; \ exit 1; \ fi; \ echo -e $(OK)
内容的提问来源于stack exchange,提问作者Sunchock
相关产品推荐
相关产品推荐

