Я не думаю, что существует способ распознать отсутствие кода области, если Ваши числа не все из одной страны (по-видимому, США), поскольку каждая страна имеет свои собственные правила для вещей как коды области.
я начал бы искать подробную информацию здесь , здесь , и здесь - если существуют API для обработки ее (в Java или иначе), они могли бы быть связаны с там также.
Если экспорт переменных не работает так, как в вашей командной строке, это говорит о том, что Make выбирает оболочку, отличную от той, которую вы используете, с другим синтаксисом для обработки переменных ( export VAR = запомните; echo $ VAR
мне подходит). Make использует / bin / sh
по умолчанию, но вы можете переопределить это с помощью переменной SHELL, которая делает , а не импорт из среды. Я предлагаю установить SHELL (в Makefile) на то, что вы используете в своей среде, и снова попробовать эксперимент export VAR = Remember
.
В конечном итоге вам нужно будет определить переменную и запустить компилятор в списке оболочки или даже в сценарии, а не в отдельных командах 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
может это сделать.
Вы можете написать другой сценарий оболочки, который выполняет все эти команды, а затем распечатывает назначения переменных, которые может использовать 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