Можно ли использовать переменную среды в файле pkg-config.pc?

#gcc #ld #pkg-config

Вопрос:

Я пытаюсь использовать библиотеку libfoo.so , которая будет установлена в $(LIBDIR)/foo/ where $(LIBDIR) , переменная среды, которая может отличаться в зависимости от настройки сборки.

Для того, чтобы другие компоненты правильно связывались с этой библиотекой, они должны иметь правильный набор LDFLAGS, а именно, они должны иметь -L$(LIBDIR)/foo -lfoo набор. Чтобы сделать это немного более общим, я хотел бы добавить файл libfoo.pc в libfoo с установленными этими флагами. В настоящее время мой файл содержит следующее содержимое:

 Name: libfoo Description: Example library Version: 1.0.0 Libs: -L$(LIBDIR)/foo -lfoo  

Мой другой компонент, который использует libfoo, имеет следующий упрощенный файл makefile:

 all:  $(CC) bar.c -o out $(shell pkg-config --libs libfoo)  

Библиотека правильно найдена pkg-config, но при запуске make появляется следующая ошибка:

 $ make cc bar.c -o out -L$(LIBDIR)/foo -lfoo /bin/sh: LIBDIR: command not found  

Другими словами, $(LIBDIR) не расширяется до значения, заданного в качестве переменной среды. Можно ли использовать переменные среды или переменные makefile в файлах .pc?

Комментарии:

1. Вы пробовали $LIBDIR без скобок?

2. Да , без скобок это приводит к cc bar.c -o out -L$LIBDIR/foo -lfoo тому, что больше не выдает ошибку «команда не найдена», но это также не помогает при связывании

3. Какую еще ошибку вы тогда получите?

4.Затем я получаю следующую ошибку компоновщика: cc bar.c -o out -L$LIBDIR/foo -lfoo /usr/bin/ld: cannot find -lfoo collect2: error: ld returned 1 exit status make: *** [Makefile:8: all] Error 1 как и ожидалось, потому что библиотека не может быть найдена

Ответ №1:

Похоже, что использование переменных среды внутри pkg-config.pc файлов невозможно.

В качестве обходного пути я вместо этого добавлю переменную префикса в файл .pc, который заполняется или перезаписывается сценарием до компиляции моего bar компонента.