Bash 如何获取在makefile中命中的子目标列表?

Bash 如何获取在makefile中命中的子目标列表?,bash,gcc,makefile,Bash,Gcc,Makefile,我有一个makefile,如下所示 all: target1 @echo "$(USER)" target1: target2 @echo "$(HOME)" target2: @echo "$(SHELL)" all: target1 @echo "Running $@" @echo "$(USER)" target1: target2 @echo "Running $@"

我有一个makefile,如下所示

all: target1
        @echo "$(USER)"

target1: target2
        @echo "$(HOME)"

target2:
        @echo "$(SHELL)"
all: target1
        @echo "Running $@"
        @echo "$(USER)"

target1: target2
        @echo "Running $@"
        @echo "$(HOME)"

target2:
        @echo "Running $@"
        @echo "$(SHELL)"
如果我执行
makeall
,我将获得一些预期的输出。但有没有办法知道在执行该命令时哪些目标被击中。在这种情况下,
make all
调用
target1、target2
。如果我做了
make target1
,那么只有
target2
会被调用

我做的一个非常糟糕的解决方案是在我的所有目标中添加echo语句,如下所示

all: target1
        @echo "$(USER)"

target1: target2
        @echo "$(HOME)"

target2:
        @echo "$(SHELL)"
all: target1
        @echo "Running $@"
        @echo "$(USER)"

target1: target2
        @echo "Running $@"
        @echo "$(HOME)"

target2:
        @echo "Running $@"
        @echo "$(SHELL)"

有什么好的解决方案不必添加这样的打印吗?

首先,当您运行

make target1
您应该看到首先执行target2,然后执行target1

如果要查看
make
如何对目标进行排序和执行,可以运行
make-d


或者,如果您想查看在不实际运行shell命令行的情况下执行的shell命令行,则选项
--dry run
存在,但不指示实际的目标名称。

首先,当您运行shell命令行时

make target1
您应该看到首先执行target2,然后执行target1

如果要查看
make
如何对目标进行排序和执行,可以运行
make-d

或者,如果希望查看在不实际运行的情况下执行的shell命令行,则选项
--dry run
存在,但不指示实际的目标名称。

因为您没有说明添加echo语句有什么“不好”之处,也没有说明要对运行哪些目标的信息执行什么操作,我们帮不了什么忙。我可以说make本身没有办法知道这一点:没有make变量或函数跟踪这些信息。因为你没有说添加echo语句有什么“不好”,或者你想对运行哪些目标的信息做什么,所以我们帮不了什么忙。我可以说,make本身没有办法知道:没有make变量或函数跟踪这些信息。