pkg-config: нейтральный для платформы способ узнать, где установить мой.файл ПК?

Как узнать, где установить мой .pc? Эти файлы помещаются в разных местах на разных операционных системах. Цель состоит в том, чтобы иметь возможность использовать что-то вроде $(INSTALL) mylib.pc $$(pkg-config --pcdir) в установите цель. Я думал pkg-config мог бы как-то сказать мне, но ничего не могу найти.

Я ищу "автономное" решение, используемое в обычном Makefile (не должно требовать поддержки autotools или аналогичного).

4 ответов


обновление: очевидно, теперь есть способ сделать это:

pkg-config --variable pc_path pkg-config

найти в этой сообщить об ошибке (см. комментарий #4). Появится текущая страница man для документирования этого.

оригинальный ответ:

ужасное хакерское решение (предполагая оболочку Борна):

pkg-config --debug 2>&1 |grep Scanning | sed -e 's/Scanning directory //' -e "s/'//g"

это может дать вам более одного местоположения.

редактировать @just somebody

короче версия

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /s///p'

и остановиться после первого каталога:

pkg-config --debug 2>&1 | sed -ne '/Scanning directory /{s///p;q;}'

начиная с pkg-config 0.24, вы можете сделать "pkg-config --variable=pc_path pkg-config".

https://bugs.freedesktop.org/show_bug.cgi?id=14975


Он должен перейти в ${libdir}/pkgconfig (т. е. ${prefix}/lib / pkgconfig)

в основном, если вы устанавливаете библиотеки, и они идут в ${libdir}, то ваш .файл ПК должен быть в ${libdir} / pkgconfig и нигде больше.


к сожалению, на складе pkg-config установка (для версии 0.23), нет способа извлечь "путь к ПК" по умолчанию, кроме запуска strings на двоичном файле (например,strings /usr/bin/pkg-config | grep '/usr/.*/pkgconfig').

если вы можете установить пользовательскую сборку, просто исправьте ее, чтобы записать значение PKG_CONFIG_PC_PATH при запуске с подходящим вариантом.

другой вариант, который, вероятно, не поможет вам (но я бы все равно упомянул для полноты), - установить PKG_CONFIG_PATH переменные среды, когда зову pkg-config.