这很容易复制这个问题,但我所看到的还没有得到回答。
我的目标是:能够将先决条件打印到目标。
我有某种解决办法,但对我来说就像是一次黑客攻击。
假设目标是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中有一个菜谱,或者是否有一个更好/更干净的方法,我不知道该怎么办。
发布于 2016-01-28 05:19:46
在不构建目标的情况下向目标显示先决条件的一种更简单的方法可能是将-p选项(如建议的这里)和-q选项一起使用,就像GNU制作手册页上建议的那样(选项的长名称是--print-data-base):
make -qp | grep '^all:'这将打印数据库,并只选择具有目标all及其先决条件的行。如果有关于该目标的规则,则该规则将位于同一段落的末尾(如果我正确理解输出的格式)。
如果使用多个makefile,可以使用-f选项指定所有这些文件:
make -f makefile-1 -f makefile-2 -qp当然,这将从所有makefile收集相同目标的先决条件,但目标不能有多个文件中指定的规则。
https://stackoverflow.com/questions/35042669
复制相似问题