【问题标题】:Assigning the output of a shell (CYGWIN) command to a Make variable将 shell (CYGWIN) 命令的输出分配给 Make 变量
【发布时间】:2012-01-27 06:48:35
【问题描述】:

我想将 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 制作: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 并回答了 - 但这似乎对我不起作用。 我显然遗漏了一些东西(可能是基本的),但经过一天的试验,我不知道遗漏的部分是什么。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    您不能在规则配方中分配变量。 第一个可能的解决方案是在规则之外的某个地方对其进行初始化,然后将其用作常规:

    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-specificphonegap

    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
    

    【讨论】:

    • 谢谢!很好的答案 - 写得很好,澄清并且有多种选择。恭喜
    【解决方案2】:

    由于配方在 shell 中运行,您可以通过 && 组合命令:

    PHONE_VER=`cat d:/path/to/workspace/common/phonegap/VERSION` && echo phonegap version: $${PHONE_VER}
    

    不要忘记使用 $$ 而不是单个 $

    【讨论】:

      猜你喜欢
      • 2016-09-08
      • 2017-07-21
      • 2011-08-13
      • 2021-03-18
      • 1970-01-01
      • 2012-02-23
      • 2012-07-16
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多