metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-25 09:28 pm

Makefile

Это, а как правильно makefile делать? А то что-то руками писать зависимости быстро начинает надоедать.

[identity profile] metaclass.livejournal.com 2012-04-25 06:43 pm (UTC)(link)
Ну вот я не очень понимаю use case - я добавляю новый .h файл, от которого зависят несколько других .h и .c, это мне его в зависимости для всех нужных .o руками прописывать или где?

[identity profile] permea-kra.livejournal.com 2012-04-25 06:52 pm (UTC)(link)
man gcc блин. И загуглить и прочитать gnu make manual

[identity profile] nicka-startcev.livejournal.com 2012-04-25 07:48 pm (UTC)(link)
gcc -что-то-там, дает некую шнягу, которую делаем для всех цэшников по make dep. потом эту шнягу тупо инклюдаем в мэйкфайл.

[identity profile] kiryl.livejournal.com 2012-04-25 08:19 pm (UTC)(link)
Нинада никакх make dep. При первой сборке объектников генерируются правила с зависимостями. Всё прозрачно.

[identity profile] nicka-startcev.livejournal.com 2012-04-25 08:51 pm (UTC)(link)
Зависит от версии make.
3.79 и 3.81 заметно отличаются по поведению.

[identity profile] kiryl.livejournal.com 2012-04-25 08:59 pm (UTC)(link)
В этом месте ничего отличаться не может.

что-то типа такого:

%.o: %.c Makefile
$(CC) -Wp,-MMD,.$<.d -o $@ -c $(CFLAGS) $<

-include .*.d

[identity profile] nicka-startcev.livejournal.com 2012-04-25 10:32 pm (UTC)(link)
> -include .*.d

если эти .d появились после запуска make, то старый мэйк вроде как не подхватывал такие изменения.

[identity profile] kiryl.livejournal.com 2012-04-26 04:14 am (UTC)(link)
Эти объектники собирать в любом случае, поскольку их ещё нет -- зависимости не нужны.

[identity profile] nicka-startcev.livejournal.com 2012-04-26 09:07 am (UTC)(link)
.d - это не объектники, а описание зависимостей.

[identity profile] kiryl.livejournal.com 2012-04-26 09:11 am (UTC)(link)
И? Они нужны что бы выяснить нужно ли пересобирать данный объектник. Если объектника нет -- ответ очевиден.

[identity profile] nicka-startcev.livejournal.com 2012-04-26 09:20 am (UTC)(link)
полная пересборка - это редкость. Чаще бывает 'поправили 3 строчки, надо проверить БЫСТРО', а не 'пересобираем всё'

[identity profile] kiryl.livejournal.com 2012-04-26 09:25 am (UTC)(link)
При чём тут полная пересборка?

Первая сборака: ничего нет -- всё нужно собрать. Собрали -- теперь у нас есть .d файлы которые описывают какие объектники нужно пересобрать если потрогали такой-то хидер. В чём проблема?

[identity profile] nicka-startcev.livejournal.com 2012-04-26 09:48 am (UTC)(link)
а. тогда не в чем. если эти .d пересобираются по нужде, а не всегда.

[identity profile] metaclass.livejournal.com 2012-04-26 05:06 am (UTC)(link)
Двойной проход. По моему идея ок.

[identity profile] nicka-startcev.livejournal.com 2012-04-26 09:01 am (UTC)(link)
ага. Так и делают.

[identity profile] nealar.livejournal.com 2012-04-26 10:49 am (UTC)(link)
2 пива этому столику!

[identity profile] tzirechnoy.livejournal.com 2012-04-26 06:39 am (UTC)(link)
1) пропишыте только в зависимости тех, у кого он явно включен.
2) Ну да, для особо ленивых есть gcc -M и практика цэли make depend.

[identity profile] nealar.livejournal.com 2012-04-26 11:09 am (UTC)(link)
у меня .d просто зависимостью прописан, в результате, "make depend" делается само