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

Makefile

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

[identity profile] dair-spb.livejournal.com 2012-04-25 08:32 pm (UTC)(link)
Use cmake, rabbi.

[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] fas-tm.livejournal.com 2012-04-25 09:15 pm (UTC)(link)
вы вот видели выше и ниже примеры ?
И эти люди ругают MSVS и запрещают ковыряться мне в носу
ужаснах !

[identity profile] baramin.livejournal.com 2012-04-25 09:48 pm (UTC)(link)
Ну, чисто для экзотики, есть еще qmake и непаханное поле вокруг ant.

Вся Java собирается на makefile, JavaFX на ant, JavaFX Webkit - qmake.
Собственно это три альтернативы для действительно кроссплатформенной сборки.
Рано или поздно, но все виденные мной проекты с устоявшейся структурой
докатывались до ручных makefile. Хотя личинки этих файлов за заре быстрого
роста генерировали разными тулами (чаще - самописными).

[identity profile] fkng-stupid-lj.livejournal.com 2012-04-25 10:05 pm (UTC)(link)
Скажем, если в проекте есть что-то кроме компиляции C/C++, то без ручного makefile никак.

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

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

[identity profile] vp.livejournal.com 2012-04-26 04:13 am (UTC)(link)
Автоматом должны такие вещи создаваться, и только автоматом. Это же не прикладная вещь, а служебная! Впрочем, тут по треду все уже описали, как зависимости вынимаются автоматом.

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

[identity profile] vp.livejournal.com 2012-04-26 04:15 am (UTC)(link)
Нет, главное, что есть механизм генерации этого дела автоматом. Это ок.

[identity profile] kiryl.livejournal.com 2012-04-26 04:16 am (UTC)(link)
Это такой же исходный код как и любой другой.

[identity profile] vp.livejournal.com 2012-04-26 04:19 am (UTC)(link)
И что, имеет какой-то смысл поменять этот исходный код и написать его как-то иначе? :)

[identity profile] familom.livejournal.com 2012-04-26 04:36 am (UTC)(link)
MSVS в той части, которая MSVC, нередко ломается на вычислении зависимостей и начинает что-то рандомно перелинковывать.

[identity profile] familom.livejournal.com 2012-04-26 04:38 am (UTC)(link)
Да ладно. cmake, add_custom_command и прочее.

[identity profile] kiryl.livejournal.com 2012-04-26 04:41 am (UTC)(link)
В не совсем тривиальном случае -- имеет.

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

[identity profile] vp.livejournal.com 2012-04-26 06:34 am (UTC)(link)
Вот. То есть основное время оно должно создаваться само. Типа как в QtCreator :)

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

[identity profile] tzirechnoy.livejournal.com 2012-04-26 06:40 am (UTC)(link)
autotools будет правильно только для ящериков. Поскольку вот где ужоснах, spaghetty code, test-driven genetic development и прочие чудеса.

[identity profile] tzirechnoy.livejournal.com 2012-04-26 06:41 am (UTC)(link)
У автокрэпа нет вещей, с котормы было бы хорошо.

[identity profile] gineer.livejournal.com 2012-04-26 08:24 am (UTC)(link)
Ну вот есть такая дерективка (это борланд мэйк)
.path.cpp= .
которая тупо включает все файлы с нужным расширением в указаной директории ;)

По идее вот аналог для линуха
vpath %.cpp $(SRC)
что выше в примере мейкфайла скинули

А так да, читать мануалы -- без этого никуда. Сам было потратил было некоторое время, на то чтобы понять как же этот мейк работает.

[identity profile] yuridichesky.livejournal.com 2012-04-26 08:33 am (UTC)(link)
автотулзы нас всех переживут и еще станцуют джигу на похоронах qmake-ов и ant-ов

[identity profile] nicka-startcev.livejournal.com 2012-04-26 09:01 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)
И? Они нужны что бы выяснить нужно ли пересобирать данный объектник. Если объектника нет -- ответ очевиден.

Page 2 of 4