我有一个Web应用程序,我正在尝试转换为使用Makefile进行构建。
我有一个“输入”目录,其中包含源文件以及定义源文件串联的“列表”文件:
js/common.js
js/other_utils.js
js/component1.js
js/component2.js
js/app_logic.js
js/admin_logic.js
js/app.js.list # common.js other_utils.js component1.js component2.js app_logic.js
js/admin.js.list # common.js admin_logic.js
我想“输出”文件由这些列表文件确定,如下所示:
static/app.js
static/admin.js
...仅在必要时重建目标(例如,如果修改了static/admin.js
或js/admin.js.list
或js/common.js
,则会重建js/admin_logic.js
。)
有没有办法在不生成包含makefile的“额外”的情况下执行此操作?
答案 0 :(得分:0)
使用GNU Make的二次扩展功能找到了一种方法!这让我可以根据“主”列表文件先决条件的内容创建一个先决条件列表:
.PHONY: js
jsfiles = $(shell ls -1 js/*.js.list)
js: $(jsfiles:js/%.js.list=static/%.js)
.SECONDEXPANSION:
static/%.js: js/%.js.list $$(shell cat js/%.js.list | sed 's/^/js\//')
echo "compile" $^