From 1f9f27df65faff2aff2cc88de0cb2aac9de3f88c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 22 Apr 2020 23:54:06 +0300 Subject: [PATCH] =?utf8?q?pkg-config=20=D0=B8=20=D1=81=D0=B8=D1=81=D1=82?= =?utf8?q?=D0=B5=D0=BC=D1=8B=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Сегодня я для C-шной библиотеке своей думал и смотрел как делать конфигурирование сборки. Ну, как минимум, найти где заголовочные файлы для зависимых библиотек и какие опции нужны. Собственно, что ./configure делает, генерируя Makefile-ы. Так как я люблю минимализм, красоту, простоту, то autoconf... наверное последнее на что стоит обращать внимание. Так говорят все кто хоть как-то в теме всяких Plan 9, suckless, Go и прочего. В основном говорят про то, что современный хорошо и добротно по современному написанный софт и ОС с дистрибутивами, не нуждаются в тоннах всего что есть в autoconf, типа это legacy сплошной. Так вот suckless проекты не чураются использовать pkg-config. Да и я с ходу вижу что изначально эта система вообще на shell была простом. Оказалось что, как такового, pkg-config у меня в системе и нет, а есть вполне себе не супер громоздкий pkgconf. С ним Makefile-ы становятся удивительно простыми, как в suckless. И чисто совпадение, но я сегодня восхитился pkg-config-ом ещё раз, когда собирал mpv из предыдущего поста. mpv использует waf сборочную систему. Сталкиваюсь с ней возможно впервые. Я не хочу глобально в систему ставить ffmpeg, поэтому его установил просто в ~/tmp/куда-то. Очевидно, waf ffmpeg там найти не сможет самостоятельно. Раньше в ./configure (autoconf) принято было добавлять разные --with-ffmpeg опции чтобы указать и намекнуть флаги для его нахождения. В waf ничего этого не увидел, но в его логе нашлась простая строка: pkg-config не нашёл ничего касательно ffmpeg. man pkgconf, быстро нахожу PKG_CONFIG_PATH переменную, добавляю в неё директорию с ~/tmp/ffmpeg/..., ведь в нём же есть автоматически сгенерированный .pc файл, который должен указывать куда надо. После добавления в PKG_CONFIG_PATH, всё обнаружилось и прекрасно собралось. Вообще это первый опыт подсовывания pkg-config файлов, но ведь в них действительно все нужные опции имеются! И они достаточно просты чтобы использовать pkg-config-compatible утилиты на несколько экранов C-шного кода. Похоже что использование pkg-config-а это очень правильное и для моего рабочего проекта направление! -- 2.48.1