克隆新仓库后如何在运行时注入额外的Make构建目标
问题原因
你运行make -f includes.txt属于独立的Make进程,Make的目标定义、变量配置都仅在当前进程生命周期内有效,该进程执行结束后所有加载的配置不会留存到后续的Make调用中。后续运行make bar-init时,新的Make进程只会读取当前目录下的默认Makefile,没有加载123.mk的逻辑,自然找不到对应目标。
可行解决方案
方案1:单次调用同时加载所有Makefile(无需修改原有仓库代码)
不需要单独创建includes.txt,也不需要拆分两次Make调用,直接在执行目标时指定要额外加载的mk文件即可:
# 执行bar-init前额外加载123.mk make -include ./barRepo/123.mk bar-init
如果需要加载barRepo下所有mk文件,可以写为:
make -include ./barRepo/*.mk bar-init
调整后的CI流程为:
- git clone fooRepo
- cd fooRepo
- make init
- git clone <barRepo.git地址> barRepo
- make -include ./barRepo/123.mk bar-init
方案2:修改原有Makefile增加可选引入逻辑(适合长期使用)
在fooRepo的原有Makefile末尾加入如下内容:
# 可选引入barRepo下的所有mk文件,不存在时不会报错 include $(wildcard ./barRepo/*.mk)
后续克隆完barRepo后,直接运行make bar-init即可正常识别目标,无需额外参数。
方案3:同时指定多个Makefile文件
如果你需要保留独立的includes.txt文件,也可以在执行目标时同时指定原有Makefile和includes.txt:
make -f Makefile -f includes.txt bar-init
这样两个Makefile的内容会被合并加载,就能识别到bar-init目标。
内容的提问来源于stack exchange,提问作者Alex Kuzmin
相关产品推荐
相关产品推荐

