Перестраивает ли Portage полные пакеты при обновлении?

У меня были проблемы с компиляцией:

make defconfig-iwlwifi

поэтому мне пришлось добавить:

sudo apt-get install build-essential

что решило мои проблемы, а перезагрузка заставила все работать.

3
18.06.2016, 21:30
2 ответа

Хотя make (1) и многие системы сборки, такие как автоинструменты, поддерживают инкрементную компиляцию, Gentoo со стандартным Portage не использует преимущества из этого. После компиляции и установки пакета рабочий каталог удаляется.

Реальная трудность при использовании инкрементальной компиляции будет заключаться в надежной сборке пакетов таким образом. Гораздо легче быть уверенным, что сборка будет успешной, правильной и воспроизводимой, если вы всегда будете делать чистую сборку. Многие системы сборки незаметно сломались бы, если бы Gentoo попытался поддерживать инкрементную перестройку.И во многих случаях потребуется повторно запустить ./ configure (или его эквивалент), что, вероятно, создаст новый config.h или обновит переменные среды, такие как ] CFLAGS и CPPFLAGS в сгенерированных файлах Makefile (или их эквивалентах, если используются другие системы сборки). Прикосновение к config.h потребует перекомпоновки большинства исходных текстов. И если PACKAGE_VERSION изменяется, что может быть передано в Makefile через CPPFLAGS , если пакет не использует config.h , все исходники следует перестроить , чтобы увидеть новые значения - если вы не можете каким-то образом понять, что определенные исходные файлы не нужно перекомпилировать, потому что они не ссылаются на конкретный макрос препроцессора C.

Таким образом, в конце концов, даже если бы разработчики Gentoo приложили все усилия, чтобы попытаться поддержать инкрементную компиляцию между обновлениями версий пакетов, многим пакетам потребуется либо полностью перекомпилировать , либо make ( 1) в любом случае приведет к их полной перекомпиляции (например, при изменении временной метки config.h ). Таким образом, это будет дорогостоящим усилием с очень незначительной выгодой - и даже, вероятно, внесет партию из скрытых ошибок , насколько я понимаю. Таким образом, я не ожидаю, что такая функция когда-либо будет представлена.

Мой ответ в основном относится к пакетам autotools / simple Makefile -type, но не все строится таким образом, поэтому точные причины, вероятно, будут различаться в зависимости от конкретного рассматриваемого пакета.

2
27.01.2020, 21:18

Portage компилирует полные исходные коды нового пакета в том виде, в каком он был доставлен апстримом (иногда команда gentoo сама исправляет исходный код, но это уже другая история).

Бинарные файлы старого пакета обычно удаляются, хотя некоторые старые библиотеки могут остаться, если их удаление повредит другим пакетам. Чтобы удалить старые исходные коды, вам нужно самостоятельно запустить eclean -d distfiles .

2
27.01.2020, 21:18

Теги

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