首页 > 解决方案 > 如何取消隐藏 Makefile 中的命令?

问题描述

我想对 Makefile 进行故障排除。使用@前缀隐藏了许多命令。例如

all: 
    @echo "building..."

如何让 make 显示所有命令?我尝试了该-d选项,但它没有显示隐藏命令。

标签: makefile

解决方案


我不确定这就是您要找的东西,但这里有一个相关的技术:

在 makefile 配方中为命令添加前缀@可能很方便,因此输出不会变得过于混乱,但是,正如您可能已经发现的那样,在某些情况下,实际查看执行了什么命令可能很有用。

一种解决方案是避免在生成文件中使用@字符,而是使用变量。说,一个字母的。说L,对于“日志输出”(但它是你的选择)。

然后,在 makefile 中的所有命令前加上该变量:

target: prerequ
     $(L)do_this $< $@
     $(L)do_that $< $@

使用一些命令行开关简单地定义变量:

ifeq "$(LOG)" ""
    LOG=no
endif

ifeq "$(LOG)" "Y"
    L=@
endif

$make target然后,您可以像这样(无日志记录)或这样从 shell 启动 make :

$ make target LOG=Y

所有执行的命令都会显示出来!


推荐阅读