Почему переменные среды не переопределяют набор переменных в make-файлах по умолчанию?

Я компилирую пакеты, и я вижу, что часто авторы Make-файла пишут набору CFLAGS в make-файле, с такой и такие опции. Я, с другой стороны, хотел бы испытать некоторую оптимизацию компилятора и хотел бы распространить переключатели компилятора для создания с как можно меньшей проблемой. Не всегда это выполнимое все же. Например, когда make-файл указывает CFLAGS, и я хочу, чтобы все вызовы компилятора C использовали-fomit-frame-pointer, за исключением необходимости явно записать что-то как CFLAGS=-fomit-frame-pointer make, что является моими опциями, которые не являются hackish. Из того, что я вижу, что существует вышеупомянутое, затем существует то же, но отличающееся make "CFLAGS=-fomit-frame-pointer" и я могу также сделать то, что я считаю лучшим решением и причиной этого вопроса:

export CFLAGS=-fomit-frame-pointer
make -e

Я считаю это лучшим, потому что откровенно даже мысль потенциально опасный флаг, я не отлаживаю программное обеспечение так очень, и когда мне нужно, я могу перекомпилировать конкретную часть по требованию с информацией об отладке и так далее. Иначе мне нравится работать с программным обеспечением выпуска, не отлаживая дополнительные свойства вообще, особенно если пакет не создается мной. Таким образом, я предполагаю то, что я спрашиваю здесь, конкретно: то, почему делают, автоматически не предпочитает переменных среды собственному make-файлу? После того, как вся среда знает лучше всего, что то, что, и в случае, если делают автора действительно, должен иметь что-то их путь, там синтаксис 'переопределения', правильно?

8
задан amn 27 July 2013 в 19:00
поделиться

2 ответа

Это спорно: «В конце концов, окружающая среда лучше всех знает, что есть что»

Это все равно, что сказать взрослому ребенку «мать знает лучше» и не дать ему пойти изучать право, потому что вы хотели посмотреть, что именно сантехником они были бы. Это их жизнь. Отпустите и позвольте им сделать свой выбор сами.

Погодите, вы спрашивали об обстановке и лабиринте. Верно.

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

Обновление: Есть аргумент, который я изначально пропустил в своем ответе - предсказуемость. Единственным требованием должно быть наличие стандартизованного набора инструментов (та же версия GCC, те же библиотеки), и учитывая, что правильно написанный файл make всегда должен давать один и тот же результат, независимо от того, какая среда или какие другие инструменты присутствуют. .

5
ответ дан 5 December 2019 в 06:52
поделиться

Make переопределит переменные, если вы поместите их в командную строку make.

Попробуйте это: make CFLAGS = -fomit-frame-pointer

Одно слово предупреждения. Большинство Make-файлов не ожидают, что их переменные будут переопределены. Это означает, что если Makefile использует CFLAGS для указания -I для включаемых файлов, -O2 для оптимизации или других флагов, вы должны добавить их в свое переопределение CFLAGS, иначе make, вероятно, завершится неудачно.

19
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

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