[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

make contest



В первую очередь это письмо обращено к Диме Обухову, который утверждает,
что "все легко, вот тут добавим еще пару зависимостей, и эта задача тоже
решится".  С удовольствием увижу присоединившимся к контесту Алексея
Чеусова, с BSD make (видимо, pmake, чтобы было топичнее - но если что, я
и netbsd найду).  Остальные желающие себя попробовать - тоже welcome.

Более того, в дальнейшем сильно не welcome рассуждения "вы не умеете
пользоваться make" от тех, кто не продемонстрировал своего умения в этой
задаче.  Она сравнительно проста.

Итак.

Дерево проекта:

dirA
  Makefile
dirB
  Makefile
  b.c
  c.c

Makefile в dirA собирает пакет.  Допустим, для простоты a.tar.gz.  Он
туда кладет dirB/b и dirB/c, которые собирает путем компиляции из b.c и
c.c соответственно dirB/Makefile.  То есть, внимание, результатом работы
dirB/Makefile (тем самым бинарником, о котором ты говоришь выше)
являются только dirB/b и dirB/c.  dirB/b.c НЕ является результатом его
работы.  И нафиг не нужен при пакетировании.

Все очень просто.

Собственно задача: написать мейкфайлы так, чтобы каждый выполнял свою
работу (dirB/Makefile создавал dirB/b и dirB/c, dirA/Makefile -
a.tar.gz).  Чтобы при этом при изменении b.c и запуске make all
(внимание на имя цели!) в dirA пересобирался dirB/b и a.tar.gz.  А
dirB/c не пересобирался (поскольку c.c не менялся).  Чтобы при этом
сборка работала, разумеется, путем запуска make all в dirA "с чистого
листа", т.е. при отсутствии в dirB бинарников.  И чтобы при запуске make
all (внимание, то же самое имя цели!) в dirB собирались b и с.  Тоже
соответственно зависимостям (ну, само по себе это просто).
Дополнительные файлы в проект добавлять можно (я, ага, хочу, чтобы
задача все же имела решение).

Почему имя цели одинаковое?  А мы моделируем debian/rules, в нем имена
целей, используемых системой сборки пакетов (следовательно, не
подлежащие замене) с легкостью совпадают с именами целей из orig.tar.gz
(тоже, соответственно, замене не подлежащими).  А дополнительный цимес
задаче оно доставляет...

make, поскольку мы в d-r, по умолчанию гнутый.

Большие знатоки заменителей могут показать решение той же задачи на
заменителях.  Было бы интересно посмотреть.

Решение считается имеющимся, если я в нем ошибок не нашел (т.е. не сумел
предъявить последовательность команд, которая демонстрирует, что задача
не решена).  А НЕ если в своем решении не сумел найти ошибок его автор.

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

Для невнимательных: задача решение имеет.  В такой вот простенькой
конфигурации - даже не слишком сложное, по крайней мере на гнутом мейке.
Но крайне хреново масштабируется.

Других тараканов make (их тоже есть) я в нее включать не стал.

Тем, кто справится с этой задачей, и будет еще пассионарен, могу
предложить ту, об которую я таки обломал зубы (отслеживание актуальных
зависимостей от инклудов, в полной постановке).

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru

kernel bug (англ.) - ядрёна вошь


Reply to: