将先决条件打印到目标

时间:2016-01-27 16:22:58

标签: makefile gnu-make

这很容易与this question重复,但由于我能看到,所以没有得到回答。

这是我的目标:能够将先决条件打印到目标。

我有某种解决方案,但对我来说感觉就像是黑客。

在名为all的文件中说目标是makefile-1,它只有先决条件:

all: foo

all: bar baz

我可以使用另一个名为makefile-2的makefile:

all:
ifeq ($(SHOW),yes)
    echo $^
else
    cat $^
endif

当正确调用时,这种方式给了我所需要的东西:

$ make -f makefile-1 -f makefile-2
cat foo bar baz
$ make -s SHOW=yes -f makefile-1 -f makefile-2
foo bar baz

但是如果前提条件在原始makefile中实际有一个配方,或者有更好/更清洁的方式,我不知道该怎么办。

1 个答案:

答案 0 :(得分:3)

在不构建目标的情况下向目标显示先决条件的更简单方法可能是同时使用if (!form.AllKeys.Any(x => x.Contains("anotherText"))) { // add error } 选项(建议here)和-p选项,如GNU-Make manual page(选项的长名称为-q):

--print-data-base

这将打印数据库并仅选择具有目标make -qp | grep '^all:' 及其先决条件的行。如果该目标有规则,它将在同一段落的末尾(如果我正确理解输出的格式)。

如果使用多个makefile,可以使用all选项指定所有makefile:

-f

这当然会从所有makefile收集同一目标的先决条件,但目标不能在多个文件中指定规则。