Bash 如何获取在makefile中命中的子目标列表?
我有一个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 $@"
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变量或函数跟踪这些信息。