我想将shell命令的输出分配给make变量。 这就是我的尝试:
phonegap:
#download new phonegap
cd ${SOURCE_PHONEGAP};git pull
PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION)
echo phonegap version: ${PHONE_VER}
从命令行运行MAKE时,我得到以下内容:
PHONE_VER = 1.3.0 make:PHONE_VER:找不到命令 所以shell字符串被转换为正确的值(1.3.0),但之后就失败了。
我也试过声明:
PHONE_VER =
然后在命令中: $ {PHONE_VER} = $(shell cat d:/ path / to / workspace / common / phonegap / VERSION) 或使用:=或+ =。没用?
我正在使用GNU make 3.81
的cygwin(在win 7上)我找到this question并回答 - 但这对我来说似乎不起作用。 我显然错过了一些东西(可能是基本的),但经过一天的实验后,我不知道丢失的部分是什么。
答案 0 :(得分:7)
您无法在规则配方中分配变量。 第一种可能的解决方案是在规则之外的某处初始化它,然后将其用作常规:
PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION)
phonegap: pull_phonegap
@echo phonegap version: ${PHONE_VER}
pull_phonegap:
@cd ${SOURCE_PHONEGAP}; git pull
只要递归展开PHONE_VER
,就可以正常工作(注意=
签到分配),shell cat ...
的实际调用将在满足pull_phonegap
后显示先决条件。
另一种可能性是为PHONE_VER
制作target-specific
变量phonegap
:
phonegap: PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION)
phonegap: pull_phonegap
@echo phonegap version: ${PHONE_VER}
最后,如果您要做的唯一事情就是打印已下载的repo版本,那么根本不需要删除变量:
phonegap: pull_phonegap
@echo phonegap version:
@cat ${SOURCE_PHONEGAP}/VERSION
pull_phonegap:
@cd ${SOURCE_PHONEGAP}; git pull
答案 1 :(得分:1)
由于配方在shell中运行,您可以通过&&:
组合命令PHONE_VER=`cat d:/path/to/workspace/common/phonegap/VERSION` && echo phonegap version: $${PHONE_VER}
不要忘记使用$$而不是单个$