Дерево зависимостей исходного пакета Ubuntu

10

У меня есть несколько пакетов. Давайте назовем их A.deb, B.debи C.deb. Каждый пакет имеет соответствующий исходный пакет A.dscи A.tar.gz, B.dscи B.tar.gz, C.dscи C.tar.gz. Пакеты зависят друг от друга: C.debзависит от B.debи B.debзависит отA.deb

Если я изменю A.deb, мне нужно перестроить, B.debиначе он не будет работать. То же самое касается B.debи C.deb. Есть ли способ автоматизировать этот процесс? Есть ли инструмент или сценарий, который сделает это для меня? Если нет, то как я могу автоматизировать это сам?

Кроме того, нет моих пакетов.

xiaodongjie
источник
2
Вы говорите "C.deb зависит от B.deb, а B.deb зависит от A.deb", так что, я полагаю, вы имеете в виду бинарные пакеты? Также вы имеете в виду компиляцию B против внешней библиотеки в A? Если это так, просто не должно быть необходимости перестраивать пакет, учитывая, что разработчик (и) А не изменил интерфейс такой библиотеки (так что это зависит от руководителя (ей) А, а не от менеджера (ов) Б. если вы являетесь разработчиком всех из них, то просто максимально сохраняйте реализацию агностика A на его интерфейсе, чтобы обеспечить максимальную совместимость).
Кос
1
Я не делаю вещи на этом уровне в Linux, но я думаю, что именно для этого и makeбыл придуман. Makefile включает в себя правила, которые определяют, что нужно перекомпилировать / перестраивать в зависимости от того, что изменилось.
Джо
1
@xiaodongjie - ты дорогой человек с дорогим вопросом - так ты уже знаешь bash и bash-scripting? ---> таким образом, вы могли бы написать небольшой скрипт с циклом switch-case, а затем, как при сборке лифта в разных случаях, что делать с пакетами. Там нет моего сценария. Ты умный, как мы умный - смейся. - этот скрипт, конечно, может быть настроен как демон (для автоматической работы).
dschinn1001
1
@Joe сказал: используйте make, и, как вы сказали сами, @xiaodongjie, цели make будут результирующими пакетами с объявленными зависимостями от пакета к пакету, а связанное действие для каждой цели будет командой, которая создает пакет. , Установите make-docи введите, info makeчтобы прочитать все об этом.
Ральф Реннквист
1
Как насчет создания псевдонима для процесса сборки?
Вильгельм Эразмус

Ответы:

3

Вы должны использовать Makefile с объявленными зависимостями сборки, например, следующим образом:

default: A.deb B.deb C.deb

C.deb: B.deb C.dsc C.tar.gz
        <command(s) to build C.deb>

B.deb: A.deb B.dsc B.tar.gz
        <command(s) to build B.deb>

A.deb: A.dsc A.tar.gz
        <command(s) to build A.deb>

Обратите внимание, что отступ команды - это TAB.

При этом Makefileвы будете использовать команду

make

и это будет определять, какие пакеты собирать и в каком порядке, а затем собирать их, все в зависимости от временных отметок файлов. Например, если, скажем, B.tar.gzимеет метку времени позже, чем B.deb(т. Е. Пакет Bимеет новый источник), то это в первую очередь приведет B.debк перестройке, и, как C.debследствие, C.debк нему будет добавлен штамп позже , это также приведет к перестройке.

Ральф Реннквист
источник
1

Ну, может быть, я полностью упускаю вашу точку зрения, но похоже, что вы перекомпилируете пакет A и хотите перекомпилировать пакеты B & C, для которых я бы просто использовал make-файл .

Кароши
источник
Можете ли вы объяснить более подробно?
xiaodongjie
или любой пример.
xiaodongjie