包含之后是否有办法获取生成的Makefile?

时间:2018-06-26 07:10:05

标签: makefile gnu-make

在(GNU)Makefile中,可以执行以下操作:

include foo.mk

all:
    @echo "Hello, world!"

在包含foo.mk之后,是否有办法让make吐出Makefile?类似于C预处理器扩展了宏等之后?

更新:以下评论者要求我指定我要解决的问题。我希望在/如果Makefile和/或底层包含的Makefile发生更改时触发重建。我发现了类似这样的食谱:

.PHONY: bar

SHAFILE := foobar.sha256
$(SHAFILE): bar
    @sha256sum Makefile | cmp -s - $@ || sha256sum Makefile > $@

...

%.o: %.c $(SHAFILE)
$(CC) -c -o $@ $< $(CFLAGS)

(很明显,校验和应该是包含包括在内的Makefile的文件,但这是一个开始。)

2 个答案:

答案 0 :(得分:1)

  

在包含foo.mk之后,是否有办法让make吐出Makefile?

否。

gmake -d带有大量调试输出,其中一些指示正在读取哪些makefile:

$ gmake -d|grep Reading
Reading makefiles...
Reading makefile `GNUmakefile'...
Reading makefile `foo.mk' (search path) (no ~ expansion)...

如果存在递归include指令或带条件的指令,这可能会有所帮助。

也许您可以告诉我们您要解决的实际问题?

答案 1 :(得分:1)

注意:我还没有尝试过,只能阅读手册。

在您的所有include行(包括传递性的嵌套包含集,甚至是由文本替换创建或由函数构建的行)之后,Make变量MAKEFILE_LIST将引用您的所有makefile。

因此在文件末尾添加一个依赖项就足够了,例如

%.o: $(MAKEFILE_LIST)

实际上,您实际上不需要有效的Makefile的内容,而只是构成它的文件的列表。