如何在Makefile执行中途刷新以读取更新后的Makefile内容?
让Make在执行过程中自动刷新Makefile的方法
Make在启动时会一次性读取并解析整个Makefile的内容,构建好依赖树后才开始执行目标,所以在一次make运行中修改Makefile,当前进程不会自动重新读取更新后的内容。要实现你需要的效果,最直接的方式是递归调用make,在修改完Makefile后启动一个新的make进程来处理后续目标。
修改你的示例Makefile如下:
.PHONY: target1 target2 target1: @sed -i 's/Brian/World/' Makefile @$(MAKE) target2 # 启动新的make进程,读取更新后的Makefile执行target2 target2: @echo "Hello Brian!"
运行make target1时,会先执行sed修改Makefile,然后调用新的make进程执行target2,此时新进程会读取更新后的Makefile,最终输出Hello World!。
如果不想在target1里直接指定target2,也可以让递归make处理当前的目标集,比如用@$(MAKE) $(MAKECMDGOALS),这样不管你指定哪个目标,修改Makefile后都会重新执行当前请求的目标。
另外,如果你的场景允许,也可以把需要动态修改的部分拆分到单独的配置文件(比如config.mk),然后在主Makefile中用include config.mk引入。这样修改config.mk时,make会自动检测到依赖文件的更新,重新解析相关规则,不需要手动递归调用make。不过这种方法需要对现有复杂的Makefile做一定拆分,适合长期维护的场景。
内容的提问来源于stack exchange,提问作者Galladite
相关产品推荐
相关产品推荐

