to post messages and comments.

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

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

solution: source1 source2
yobatool source1 source2 -o [email protected]

а

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

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

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

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

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

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

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

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

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

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

Как ?

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

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

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

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

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

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

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

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

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

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

Задача: пишу мейкфайл, есть директория, в ней кучка поддиректорий. Нужно запихнуть в переменную все поддиректории, кроме некоторых. Пока родил такой вот отвратительный пиздец:
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

Ни у кого при сборке такого небыло: 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 ?

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

target : $([email protected])
...

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

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