Чтобы добавлять сообщения и комментарии, .

@glupovat:
glupovat

my little .PHONY

@nyuufac:
nyuufac

Если вы разрабатываете какие-нибудь инструменты, которые сами же потом и используете при сборке чего-нибудь мейком — добавляйте их в зависимости.

Т.е. пишите не просто

solution: source1 source2
yobatool source1 source2 -o $@

а

solution: /usr/local/bin/yobatool source1 source2
yobatool source1 source2

Это возвращает мейку правильную ленивость и вообще очень удобно.

@6Volt:
6Volt

сорян за тупой вопрос — есть мэйкфаил. нет желания его колупать вытаскивая нужный кусок. задача : в дефолте одна переменная. нужно получить строчку сборки(гцц %аргументы% %имя исходника%) или получить ошибку уровня 'невозможно вытащить ибо необходимые переменные — они инициализируются в процессе сборки'. есть чё такое вот ?//варианты по-прогресивнее приветствуются

@Strephil:
Strephil

Почему-то захотелось почитать документацию к make'у, читаю:
Double-colon rules are somewhat obscure and not often very usefulПочему-то мне кажется, что это не только к double-colon, это к половине gnu можно отнести.

@datacompboy:
datacompboy

$ make ruin
люблю создавать. создавать руины

@datacompboy:
datacompboy

те, кто делают "make" != "make all" — не хорошие люди, а... в общем, редиски.
и да, я тоже косячу.

@HorroRise:
HorroRise

У моих постов с жрачей теперь есть название, благодаря @nibb13 : "Make meal, not war!"))).
Сегодня будет рецепт популярный, но может кто то не готовит так картошку. Мне рецепт достался от папы, чьей он кухни я не в курсе, но подозреваю что интернациональной. Короче, молодая картошка в панировочных сухарях. Что понадобится:
— 1 кг молодой картошки диаметром 3 см примерно, клубни побольше можно разрезать пополам.
— укроп, пол пучка.
— панировочные сухари.
— 3 — 5 зубчиков чеснока.
— соль, черный перец.
Картошку тщательно моем, очищаем от глазков, кожуру оставляем на картошке. Я мою картошку с помощью железной губки для мытья посуды, так она хорошо очищается и в то же время нужное количество кожуры остается на ней. Пожарить можно в духовке или на сковороде, в духовке вкуснее. На сковороде, при закрытой крышке, обжарить до румяного цвета. В духовке, чтоб не получилась сухая, я накрываю чугунную сковородку фольгой. После того, как картошка готова, засыпаем сухари. Сухари впитывают все масло в картошке, так что его можно не жалеть. Затем закидываем потертый на мелкой терке чеснок и мелко нарезанный укроп. Солим, перчим и картошка готова. По желанию можно добавить ложечку сливочного масла). Омномном)

@4DA:
4DA

Я правильно понимаю, что ничего универсальней make так пока и не придумали?

@Shchvova:
Shchvova

а можно ли попросить мейк построить все goals соответствующие паттерну (вайдкарду)? Ну типа:
make device1_*
В самом мейке есть несколько таргетов типа device1_locA, device1_locB. Но они все фони, т.е. не настоящие файлы.

@Shchvova:
Shchvova

Попробую объяснить проблему — есть папочка с масштабироваными изображениями, и папочка с оригиналами. И там и там большая иерархия папок. Масштабированные отлично генерируются мейком, проблема что если оригинал удалить/переименовать, то останется производная картинка. Как их поудалять? Скрипт из предыдущего поста это делает, но, к сожалению медленно. А хочется быстро. Есть идеи?

@Shchvova:
Shchvova

было много хайпа по поводу моего предыдущего поста, потому напишу что делает мой мейк. Он собирает ассеты для игры. И вообще он не сильно собирает код. Есть несколько мейкфайлов. Есть главный который дергает парочку мейков. Один из них собирает тулзы, которые потом другие мейки вызывают. Другой собирает все картинки одной из тулзов в атласы, для каждой из платформ. Всего есть 16 платформ, в каждой 50 атласов. Всего около 20 000 картинок. Потом из этих атласов, и описаний тайлов, квестов, локалей и т.п другие тулзы для каждой из платформ генерируют бинарники, которые потом пакует третья тулза в ахивы которые умеет грузить наш движок. В результате получается директория ассетов более с более пол миллиона исходных штук и сорцов. Игра очень большая... Так вот, я горжусь собой что смог все это чудо написать в мейки с правильными деменденсями что бы все строилось в отдельных потоках (make all -j8). Заодно и прооптимизировал тулзы. В результате сборка вместо 4х часо занимает теперь 20 минут :)

@4DA:
4DA

GNU Make 4.0 released
* New feature: GNU Guile integration
This version of GNU make can be compiled with GNU Guile integration.
GNU Guile serves as an embedded extension language for make.
See the "Guile Function" section in the GNU Make manual for details.
Currently GNU Guile 1.8 and 2.0+ are supported.

Теперь заживем.

@segfault:
segfault

pastebin.com
Кастую make-богов для помощи в автоматизации.
— Есть каталог с файлами *.csv
— Есть список целей преобразующих каждый csv в sqlite особым образом
— all объединяет все цели *.sqlite
— clean удаляет все *.sqlite
— tests зависит от сех _test где — имя исходного csv файла, который преобразуется в sqlite
— Есть список TARGETS с *.sqlite целями
— Есть список TESTS с *_test целями

надо автоматически вывести цели вида
filename_test: filename.sqlite
performTest $<

Как ?

@SLX:
SLX

Столкнулся с очень странным явлением, пишу сишный код в eclipse, собираю, все ок. Отошел минут на 20 от компа. Пришел, изменяю исходник, компилю, а мне выдает:
make: Внимание: Файл `objects.mk' имеет будущее время 9,8e+03 s модификации
make: Цель `all' не требует выполнения команд.
make: предупреждение: Неправильный ход часов. Сборка может быть неполной.

Как бороться? В гугле куча советов, но чет пока толку ноль(

@Shchvova:
Shchvova

есть у нашего мейка target, которая пакует все картинки в папке.

phone.pack: phone_images/*.png packer
  packer -o phone.pack -i hone_images/*.png

Ну общим, жуйка, спасай. Дело в том что эта цель не строится, если удалить или добавить картинку в папочку. Что делать?

@CheshaNeko:
CheshaNeko

Ко ко ко, я make мне не нравятся 4 пробела, сделай мне табы, ко ко ко.

@nox:
nox

пока компелится сервак, пойду женюсь и разведусь, состарюсь и умру, вот так.

@Strephil:
Strephil

А вот если у меня правило для сборки конкретной цели — несколько команд с довольно сложными аргументами.
Можно ли как-то обозначить, что вот тут меня теперь тупо шелловские команды, чтобы $ не имел никакого значения и т.п.? Пока что вставил просто команду sh rulename.sh
Я вообще make умею почему-то не очень…

@xorkrus:
xorkrus

как собрать ядро под вендой?

@alxrt:
alxrt

Ребята, не понимаю, чего сложного в LFS? У меня вся система собирается двумя командами:
make pizdato && make zaebiz

@dr-Chaos:
dr-Chaos

#1929039 POSIX make умеет как в качестве темплейт таргетов воспринимать только суффиксы и если есть значок ~ , префикс в начале файла s. . Уродство.

@dr-Chaos:
dr-Chaos

Господа, а можно как-то на POSIX make изобразить такую конструкцию:

dir/%.o:
   cd dir && make %*.o

Т.е. часть *.c файлов для собрки лежит в поддиректории и для того чтоб их сбилдить надо вызвать make foo.o в этой поддиректории. На GNU make я это изобразил, а вот на POSIX как-то херово :(

@anton0xf:
anton0xf

а умеет ли хоть одна из распространенных систем сборки оценивать текущий прогресс (например в процентах)?

@waterlaz:
waterlaz

есть где-то freebsd'шный make под linux? Или ближайший совместимый аналог?

@civil696:
civil696

$ make -p | grep '%.c: %.y' -A 4
make: *** Не заданы цели и не найден make-файл. Останов.
%.c: %.y
# команды, которые следует выполнить (встроенные):
$(YACC.y) $<
mv -f y.tab.c $@

И вот какими же надо было быть пидарасами чтобы такое придумать?

@borman:
borman

Жуйк, подскажи, как это правильно сделать: я люблю использовать в своих проектах GNU Make с генерацией зависимостей через gcc -MM, но есть один момент --- так как файлы зависимостей .d собираются для удовлетворения директив включения, то вызов make clean приводит к их генерации. Как запретить этот не сильно-то вредный, но неприятный эффект?

@lexszero:
lexszero

Задача: пишу мейкфайл, есть директория, в ней кучка поддиректорий. Нужно запихнуть в переменную все поддиректории, кроме некоторых. Пока родил такой вот отвратительный пиздец:
DIR_NOT_NEEDED = bsp eds edserial include profile psp
DIR = $(foreach d, $(filter-out $(DIR_NOT_NEEDED), $(notdir $(wildcard $(MQX_SRC_PATH)/*))), $(MQX_SRC_PATH)/$(d))

Я совсем упорок или это ок? :3

@TheKinematiX:
TheKinematiX

Ни у кого при сборке такого небыло: widgets/actionlineedit.cpp: In constructor ‘ActionLineEdit::ActionLineEdit(QWidget*)’:
widgets/actionlineedit.cpp:154: ошибка: нет декларации ‘menu_’ в этой области видимости
widgets/actionlineedit.cpp: In member function ‘virtual void ActionLineEdit::actionEvent(QActionEvent*)’:
widgets/actionlineedit.cpp:179: ошибка: нет декларации ‘menu_’ в этой области видимости
widgets/actionlineedit.cpp: At global scope:
widgets/actionlineedit.cpp:230: ошибка: redefinition of ‘void ActionLineEdit::contextMenuEvent(QContextMenuEvent*)’
widgets/actionlineedit.cpp:215: ошибка: ‘virtual void ActionLineEdit::contextMenuEvent(QContextMenuEvent*)’ previously defined here
make[1]: *** [.obj/actionlineedit.o] Ошибка 1
make[1]: Выход из каталога `/home/thekinematix/psi/src'
make: *** [sub-src-make_default] Ошибка 2 ?

@wasd:
wasd

так, теперь надо сделать мейкинсталл и добавить ПЛАГИНЫ в виде кетчупа и еще чего-нибудь.

@itakingiteasy:
itakingiteasy

Оптимизовал всё как сумел: paste.pocoo.org

@itakingiteasy:
itakingiteasy

Сделал простенький скриптик для вима, пукающий аутпут мейка в qf-консоль: paste.pocoo.org . Скрипт зависит от вимовой клиент-серверной модели, которая в свою очередь зависит от иксов. Такие дела.

@nexeuse:
nexeuse

sudo make me a sandwichэквивалентно (с небольшими оговорками)
sudo make me && sudo make a && sudo make sandwich

@Lirium:
Lirium

Если запускать не "make", а что-то вроде "make 2>&1 >/dev/null | grep rror", то ошибки будут видны сразу.

@a13:
a13

а можно как-нибудь заставить GNU make реагировать на изменение самого makefile? Просто сейчас постоянно подкручиваю опции, приходится каждый раз make clean делать — лениво.

@Pavel81:
Pavel81

На плеере удалось собрать последнюю сборку из тарбола openvpn :-D я был приятно удивлён!

@Strephil:
Strephil

Откатился до GNU Make 3.81, хорошо, что я для кеша оставил достаточно мѣста, вродѣ, пошла конпеляция.

@HobbitMage:
HobbitMage

Карликовая планета Makemake названа не в честь утилиты make, а в честь чьего-то божка Макемаке.

@alxrt:
alxrt

Тем, кому приходится собирать всякую блеву под опенку может потребоваться собирать через gmake, а не make

@hatred:
hatred

есть необходимость в правиле для цели подставлять в зависимости имя цели, т.е. получить что-то вроде:

target : $(OBJ_$@)
...

при условии, что выше переменная OBJ_target определена. Вышеупомянутая конструкция не срабатывает, хотя внутри цели работает отлично:
cc -o $@ $(OBJ_$@) ...

в общем, пока фантазия не дошла, как в зависимостях цели сделать подстановку имени цели

@mikelsv:
mikelsv

какое же это наслаждение видеть список ошибок при компиляции. а список не найденных файлов вызывает вообще кайф. с правильным скриптом сборка превращается в удовольствие. все проблемы доставляются на тарелочке.