Большинство людей не понимают значения сообщения об ошибке. Без шуток. Большинство из них.
Они считают, что сообщения об ошибках одинаковы, говорит: «Что-то не так!» Они не удосужились его прочитать. Хотя это самая важная часть сообщения об ошибке, а не только тот факт, что она была поднята, но это имеет значение. Это может сказать вам , что идет не так. Сообщения об ошибках предназначены для помощи, а не для того, чтобы беспокоить вас «как скрыть это?». проблема. Это одно из самых больших недоразумений в мире веб-программирования новичка.
Таким образом, вместо сообщения об ошибке gagging следует прочитать то, что он говорит. Он имеет не только одно значение «файл не найден». Могут быть тысячи разных ошибок: permission denied
, save mode restriction
, open_basedir restriction
и т. Д. Каждый из них требует соответствующих действий. Но если вы заткнете это, вы никогда не узнаете, что произошло!
OP представляет собой сообщение об ошибках с обработкой ошибок, в то время как это очень большая разница! Обработка ошибок для пользователя. «что-то случилось» достаточно. Хотя сообщения об ошибках предназначены для программистов, которым отчаянно нужно знать, что именно произошло.
Таким образом, сообщения о ошибках никогда не появляются. Оба регистрируют его для программиста и обрабатывают его для пользователя.
У вас есть несколько вариантов настройки переменных извне вашего make-файла:
Из среды - каждая переменная среды преобразуется в переменную make-файла с то же имя и значение.
Вы также можете включить параметр -e
(он же - environment-override
), и переменные среды будут переопределять назначения, сделанные в make-файле (если сами эти назначения не используют директива override
. Однако это не рекомендуется, и гораздо лучше и гибче использовать присваивание ? =
(оператор условного присваивания переменной, он действует только в том случае, если переменная еще не определена):
FOO? = default_value_if_not_set_in_environment
Обратите внимание, что некоторые переменные не наследуются из среды:
MAKE
получается из имени скрипта SHELL
либо устанавливается в make-файле, либо по умолчанию имеет значение / bin / sh
(обоснование: команды указываются в make-файле, и они зависят от оболочки). Из командной строки - make
может принимать назначения переменных как часть своей командной строки вместе с целями:
make target FOO = bar
Но затем все назначения переменной FOO
в файле makefile будут игнорироваться , если вы не используете в назначении директиву override
. (Эффект такой же, как и с параметром -e
для переменных среды).
Экспорт из родительского Make - если вы вызываете Make из Makefile, вам обычно не следует явно записывать присваивание переменных вроде этого:
# Не делайте этого!
target: { {1}} $ (MAKE) -C target CC = $ (CC) CFLAGS = $ (CFLAGS)
Вместо этого лучшим решением может быть экспорт этих переменных. Экспорт переменной делает ее в среде каждого вызова оболочки, и вызовы Make из этих команд выбирают эту переменную среды, как указано выше.
# Сделайте вот так
CFLAGS = -g
export CFLAGS
target:
$ (MAKE) -C target
Вы также можете экспортировать все переменные, используя экспорт
без аргументов.
Самый простой способ:
make foo=bar target
Затем в вашем make-файле вы можете указать $ (foo)
. Обратите внимание, что это не распространяется на подделки автоматически.
Если вы используете под-make, см. Эту статью: Передача переменных в под-make
Допустим, у вас есть make-файл, подобный этому:
action:
echo argument is $(argument)
You затем назовет его make action argument = something
Переменные в make могут поступать из среды, в которой make бег. Каждая переменная среды, которую программа make видит при запуске, преобразуется в переменную make с тем же именем и значением. Однако явное присвоение в make-файле или с аргументом команды отменяет среду.
Итак, вы можете сделать (из bash):
FOOBAR=1 make
, что приведет к переменной FOOBAR
в вашем Makefile.