读取JSON并分配给make变量列表

Jon*_*ker 12 makefile gnu-make

我可以从中得到一个值package.json:

LAST_VERSION := $(shell node -p "require('./package.json').version")
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要几个值呢?喜欢:

PROJECT     := $(shell node -p "require('./package.json').name")
LAST_VERSION:= $(shell node -p "require('./package.json').version")
DESCRIPTION := $(shell node -p "require('./package.json').description")
PROJECT_URL := $(shell node -p "require('./package.json').repository.url")
Run Code Online (Sandbox Code Playgroud)

这是唯一的方法吗?也许有办法创建一种列表.

Jon*_*ker 19

最后,我想出了这个:

define GetFromPkg
$(shell node -p "require('./package.json').$(1)")
endef

PROJECT      := $(call GetFromPkg,name)
LAST_VERSION := $(call GetFromPkg,version)
DESCRIPTION  := $(call GetFromPkg,description)
PROJECT_URL  := $(call GetFromPkg,repository.url)
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是_make_不会从`$(call ...)`中的参数中去掉空格.你在这里得到它因为`node -p"require('./ package.json').name"`仍然有效.(`$(调用GetFromPkg,name)`可能更多地出现在_make_ idiom IMHO中. (2认同)