to post messages and comments.

@pauldeburst:

Хэй Привет! Меня зовут Павел Дуглас и это тестовое сообщение с Марса

@glupovat:

my little .PHONY

@nyuufac:

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

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

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

а

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

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

@6Volt:

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

@Strephil:

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

@datacompboy:

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

@datacompboy:

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

@HorroRise:

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

@4DA:

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

@Shchvova:

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

@Shchvova:

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

@Shchvova:

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

@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:

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

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

Как ?

@SLX:

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

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

@Shchvova:

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

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

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

@CheshaNeko:

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

@nox:

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

@Strephil:

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

@xorkrus:

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

@alxrt:

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

@dr-Chaos:

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

@dr-Chaos:

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

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

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

@anton0xf:

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

@waterlaz:

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

@civil696:

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

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

@borman:

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

@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:

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

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

@itakingiteasy:

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

@itakingiteasy:

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

@nexeuse:

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

@Lirium:

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

@a13:

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

@Pavel81:

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

@Strephil:

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

@HobbitMage:

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

@alxrt:

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

@hatred:

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

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

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

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