Я компилирую пакеты, и я вижу, что часто авторы 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-файлу? После того, как вся среда знает лучше всего, что то, что, и в случае, если делают автора действительно, должен иметь что-то их путь, там синтаксис 'переопределения', правильно?
Это спорно: «В конце концов, окружающая среда лучше всех знает, что есть что»
Это все равно, что сказать взрослому ребенку «мать знает лучше» и не дать ему пойти изучать право, потому что вы хотели посмотреть, что именно сантехником они были бы. Это их жизнь. Отпустите и позвольте им сделать свой выбор сами.
Погодите, вы спрашивали об обстановке и лабиринте. Верно.
Итак, make - это новый процесс, который начинается после того, как вы изменили среду, и в общем случае среда не знает, каковы цели make и как они работают. Итак, все, что make явно устанавливает , должно превзойти все, что может случиться в среде.
Обновление: Есть аргумент, который я изначально пропустил в своем ответе - предсказуемость. Единственным требованием должно быть наличие стандартизованного набора инструментов (та же версия GCC, те же библиотеки), и учитывая, что правильно написанный файл make всегда должен давать один и тот же результат, независимо от того, какая среда или какие другие инструменты присутствуют. .
Make переопределит переменные, если вы поместите их в командную строку make.
Попробуйте это:
make CFLAGS = -fomit-frame-pointer
Одно слово предупреждения. Большинство Make-файлов не ожидают, что их переменные будут переопределены. Это означает, что если Makefile использует CFLAGS для указания -I для включаемых файлов, -O2 для оптимизации или других флагов, вы должны добавить их в свое переопределение CFLAGS, иначе make, вероятно, завершится неудачно.