Назначение выходных данных команды оболочки (CYGWIN) переменной Make - PullRequest
2 голосов
/ 24 декабря 2011

Я хочу назначить вывод команды оболочки в переменную 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: команда не найдена поэтому строка оболочки переводится в правильное значение (1.3.0), но после этого происходит сбой.

Я также пытался объявить:

PHONE_VER = 

и затем в команде: $ {PHONE_VER} = $ (оболочка кота d: / path / to / workspace / common / phonegap / VERSION) или используя: = или + =. не работал

Я использую cygwin (на win 7) с GNU make 3.81

Я нашел этот вопрос и ответ - но мне кажется, это не работает. Я, очевидно, что-то упускаю (возможно, базовый), но после дня экспериментов я понятия не имею, что такое недостающая часть.

Ответы [ 2 ]

7 голосов
/ 24 декабря 2011

Вы не можете назначать переменные внутри рецептов правил. Первое возможное решение состоит в том, чтобы инициализировать его где-то вне правила, а затем использовать его как обычный:

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.

Другая возможность: make PHONE_VER variable target-specific for phonegap:

phonegap: PHONE_VER = $(shell cat d:/path/to/workspace/common/phonegap/VERSION)
phonegap: pull_phonegap
    @echo phonegap version: ${PHONE_VER}

Наконец, если единственное, что вы хотите сделать - это напечатать версию загруженного репо, тогда будет проще вообще избавиться от переменных:

phonegap: pull_phonegap
    @echo phonegap version:
    @cat ${SOURCE_PHONEGAP}/VERSION

pull_phonegap:
    @cd ${SOURCE_PHONEGAP}; git pull
1 голос
/ 27 августа 2016

так как рецепты запускаются в оболочке, вы можете комбинировать команды через &&:

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

, не забудьте использовать $$ вместо одного $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...