2010-02-05 1 views
7

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

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

+2

При установке файла * .pc, он должен быть установлен в $ (DestDir) $ (LIBDIR)/pkg-config. У пользователя вашего пакета есть привилегия и ответственность за установку DESTDIR и libdir соответственно, и если ваш пакет игнорирует то, что указывает пользователь, ваш пакет не работает. –

ответ

5

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

pkg-config --variable pc_path pkg-config 

Найдено в этом bug report (см комментарий # 4). Текущая страница руководства, похоже, документирует это.

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

Ужасного хак решение (при условии, Bourne Shell):

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

Это может дать вам больше, чем одно место.

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

короткая версия

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

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

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

Появляется Гарри Поттер!;) –

+0

@ просто кто-то: Поздравляю! Очень приятно (но взломано, но так же мое решение: -P) подходит для использования отладочных сообщений. :-P –

+0

- Использование autoconf для портативного тестирования функций - проверка. - Использование automake для портативного здания - проверка. - Использование libtool для абстрагирования от особенностей обработки разделяемой библиотеки - проверка. - Использование pkg-config для портативного обнаружения флагов компилятора - проверка. - ... - Опираясь на недокументированную деталь реализации pkg-config, которая может быть или не быть там, победив всю борьбу за переносимость - проверьте. -1. Все еще ищете портативный и безумный способ сделать это – fstd

1

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

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

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

+0

«невозможно»: это тоже мой вывод. не ответ, я был бы слишком доволен, но, если Гарри Поттер не появится, я приму это. –

3

он должен идти в $ {LIBDIR}/pkg-config (т.е. $ {prefix}/lib/pkgconfig)

b асинхронно, если вы устанавливаете библиотеки, и они идут в $ {libdir}, тогда ваш .pc-файл должен быть в $ {libdir}/pkgconfig и больше нигде.

+0

было бы неплохо, если бы реальный мир был таким простым, но по какой-то причине FreeBSD ставит файлы pkgconfig в $ {prefix}/libdata/pkgconfig. это глупо, но оно есть. –

+0

В этом случае посмотрите, что такое glib делает – Spudd86

+1

FreeBSD, безусловно, следует шаблону; они установили libdir = $ {prefix}/libdata –