Как обработать установку среды в make-файле?

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

я начал бы искать подробную информацию здесь , здесь , и здесь - если существуют API для обработки ее (в Java или иначе), они могли бы быть связаны с там также.

8
задан polyglot 9 October 2009 в 23:34
поделиться

3 ответа

Если экспорт переменных не работает так, как в вашей командной строке, это говорит о том, что Make выбирает оболочку, отличную от той, которую вы используете, с другим синтаксисом для обработки переменных ( export VAR = запомните; echo $ VAR мне подходит). Make использует / bin / sh по умолчанию, но вы можете переопределить это с помощью переменной SHELL, которая делает , а не импорт из среды. Я предлагаю установить SHELL (в Makefile) на то, что вы используете в своей среде, и снова попробовать эксперимент export VAR = Remember .

6
ответ дан 5 December 2019 в 07:59
поделиться

В конечном итоге вам нужно будет определить переменную и запустить компилятор в списке оболочки или даже в сценарии, а не в отдельных командах make . Однако вы можете добавить несколько уточнений. Вы могли бы сказать make о скрипте:

maintarget: script.sh blah.c
    source script.sh; g++ blah.c

script.sh:
    setup include script here

Другой вариант - просто выполнить все это в одной оболочке

maintarget: blah.c
    run this; run that; run the other thing; g++ blah.c 

Я считаю, что все версии make будут запускать ]; list в той же оболочке, но вы всегда можете принудительно создать подоболочку с помощью (list) или путем специального вызова сценария оболочки в качестве оболочки команды компилятора.

Не забудьте, что соответствующие цели зависят от самих скриптов. Кстати, некоторые версии make ( pmake aka bsd make ) могут выполнять команду при определении переменной make, а все версии make затем экспортируют те. Но я не думаю, что gmake может это сделать.

3
ответ дан 5 December 2019 в 07:59
поделиться

Вы можете написать другой сценарий оболочки, который выполняет все эти команды, а затем распечатывает назначения переменных, которые может использовать make. Запустите сценарий, направьте его вывод в файл, затем включите этот файл из своего Makefile. Например:

Makefile:

all:
    echo $(FOO)

test.mk: test.sh
    ./$< > $@

include test.mk

test.sh

echo "FOO=1"

Запуск "make" в каталоге, содержащем этот Makefile, производит:

make: Entering directory `/home/luser/build/mktest'
Makefile:7: test.mk: No such file or directory
./test.sh > test.mk
make: Leaving directory `/home/luser/build/mktest'
make: Entering directory `/home/luser/build/mktest'
echo 1
1
make: Leaving directory `/home/luser/build/mktest'

make создает test.mk путем запуска сценария оболочки, а затем включает его. test.mk содержит вывод test.sh и анализируется как Makefile. См. http://www.gnu.org/software/make/manual/make.html#Include для получения дополнительной информации.
Мы используем вариант этого в Mozilla client.mk, чтобы вы могли определять параметры в файле "mozconfig": http://mxr.mozilla.org/mozilla-central/source/client.mk#138

1
ответ дан 5 December 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: