0

我想解析几个 json 文件,获取它们的内容,预先/附加一些文本并将新字符串保存在另一个文件中。目前我有这个适用于单个文件:

#set variables for shared libs
SHAREDFILE=$(SERVERPATH)/xx/mod/supervisor/cfg/prod/config.json
JSONCONF = `cat "$(SHAREDFILE)"`

share:
    @echo "Sharing node-client code in ${PROJECT}.- ENV $(ENV)..."
    @echo "parseConfig($(JSONCONF));" > $(CLIENTPATH)/public/js/shared/config.json

因为据我所知,变量只能在规则之外设置,我将如何为文件列表执行此操作?

更新:要复制的文件可以在不同的目录中,但它们都应该复制到同一个目标目录中。

4

1 回答 1

2

根据对您的文件列表的猜测:

SHAREDFILES = foo.json bar.json baz.json

TARGETS = $(addprefix $(CLIENTPATH)/public/js/shared/, $(SHAREDFILES))

share: $(TARGETS)

$(TARGETS) : $(CLIENTPATH)/public/js/shared/%.json : $(SERVERPATH)/xx/mod/supervisor/cfg/prod/%.json
    @echo "Sharing node-client code in ${PROJECT}.- ENV $(ENV)..."
    @echo "parseConfig(`cat $<`);" > $@

编辑:
如果源文件位于多个目录中,但目标都进入同一个目录......有几种方法可以做到这一点。这可能是最好的:

SHAREDFILES = some/path/foo.json another/path/bar.json yet/another/path/baz.json

TARGETDIR = $(CLIENTPATH)/public/js/shared
TARGETS = $(addprefix $(TARGETDIR)/, $(notdir $(SHAREDFILES)))

vpath %.json $(dir $(SHAREDFILES))

share: $(TARGETS)

$(TARGETS) : $(TARGETDIR)/%.json : %.json
    @echo "Sharing node-client code in ${PROJECT}.- ENV $(ENV)..."
    @echo "parseConfig(`cat $<`);" > $@
于 2012-09-05T02:07:03.010 回答