2011-12-24 2 views
2

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

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

PHONE_VER = 

, а затем в команде: $ {PHONE_VER} = $ (оболочки кошки д:/путь/к/рабочее пространство/общие/PhoneGap/VERSION) или используя: = или + =. не работает

Я использую Cygwin (на победу 7) с GNU Make 3,81

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

ответ

6

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

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 рекурсивно расширяется (обратите внимание на = знак в назначении), и после вызова pull_phonegap появится фактическое обращение shell cat ....

Другая возможность сделать 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} 

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

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

pull_phonegap: 
    @cd ${SOURCE_PHONEGAP}; git pull 
+0

спасибо! отличный ответ - красиво написанный, проясненный и с несколькими вариантами. cudos – alonisser

+0

Добро пожаловать! :) –

1

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

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

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

Смежные вопросы