Makefile 使用分隔符拆分gnu make中的字符串
我有以下代码的makefile:Makefile 使用分隔符拆分gnu make中的字符串,makefile,gnu,Makefile,Gnu,我有以下代码的makefile: .PHONY: $(PROJECTDIR)/projectroot $(PROJECTDIR)/projectroot: if [ -f $(@)/etc/release ]; then \ #$(RELEASE_VERSION) will have value something like 00.01.02.03 IFS=. read major minor micro build <<<"${RELEASE_
.PHONY: $(PROJECTDIR)/projectroot
$(PROJECTDIR)/projectroot:
if [ -f $(@)/etc/release ]; then \
#$(RELEASE_VERSION) will have value something like 00.01.02.03
IFS=. read major minor micro build <<<"${RELEASE_VERSION}" \
echo major=${major} > $(@)/etc/release \
echo major=${minor} >> $(@)/etc/release; \
echo major=${micro} >> $(@)/etc/release; \
echo major=${build} >> $(@)/etc/release; \
fi
我需要替换IFS=。使用gnu make中的一些等效命令,您能帮我解决这个问题吗?谢谢
.PHONY: $(PROJECTDIR)/projectroot
$(PROJECTDIR)/projectroot: $(PROJECTDIR)/projectroot/etc/release
$(PROJECTDIR)/projectroot/etc/release:
echo "${RELEASE_VERSION}" | \
sed 's/^/major=/; s/\./\nminor=/; s/\./\nmicro=/; s/\./\nbuild=/' >$@
将依赖项添加到发布文件。问题在于,您正在将值读入名为
major
、minor
等的shell变量中,但随后您正在打印具有相同名称的Make变量。shell无法设置Make变量
要修复现有代码,您需要将$
字符重复为$
,因此将输出设置为$
到shell,shell将解释它们(您每次都说“major”,并且缺少一些分号):
这将创建
etc/release
文件,如果它不存在,这不是原始文件所做的(当然,原始文件可能没有做想要做的事情),但是if[-f${}/etc/release]
可能起到了某种作用,尽管我不知道是什么!
.PHONY: $(PROJECTDIR)/projectroot
$(PROJECTDIR)/projectroot: $(PROJECTDIR)/projectroot/etc/release
$(PROJECTDIR)/projectroot/etc/release:
echo "${RELEASE_VERSION}" | \
sed 's/^/major=/; s/\./\nminor=/; s/\./\nmicro=/; s/\./\nbuild=/' >$@
IFS=. read major minor micro build <<<"${RELEASE_VERSION}" ; \
echo major=$${major} > $(@)/etc/release ;\
echo minor=$${minor} >> $(@)/etc/release; \
echo micro=$${micro} >> $(@)/etc/release; \
echo build=$${build} >> $(@)/etc/release; \
REL_WORDS := $(subst ., ,${RELEASE_VERSION})
...
echo major=$(word 1,${REL_WORDS}) > $(@)/etc/release ;\
echo minor=$(word 2,${REL_WORDS}) >> $(@)/etc/release ;\
echo micro=$(word 3,${REL_WORDS}) >> $(@)/etc/release ;\
echo build=$(word 4,${REL_WORDS}) >> $(@)/etc/release ;\