在(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的文件,但这是一个开始。)
答案 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的内容,而只是构成它的文件的列表。