[О блоге] [наверх] [пред] [2020-04-22 23:54:06+03:00] [1f9f27df65faff2aff2cc88de0cb2aac9de3f88c]

pkg-config и системы сборки

Сегодня я для 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-а это очень правильное и для
моего рабочего проекта направление!

    [оставить комментарий]