Модуль PkgConfig: INCLUDE_DIRS не перечисляет все каталоги - PullRequest
0 голосов
/ 23 мая 2018

Короткая версия (TL; DR)

Использование CMake с модулем PkgConfig Я пытаюсь распечатать все каталоги include для библиотеки, которая мне нужна для моего проекта, назовем ее thelibrary.Я делаю это, печатая значение переменной THELIBRARY_INCLUDE_DIRS.Список включаемых каталогов напечатан, но один каталог отсутствует.

Это действительно удивило, как будто я набрал на терминале следующее:

pkg-config thelibrary --cflags

затем все печатаются каталоги включения, включая тот, который отсутствует в THELIBRARY_INCLUDE_DIRS.

То же самое происходит, если я пытаюсь напечатать значение THELIBRARY_CFLAGS.

Как это возможно?Где ошибка?(Надеюсь, это моя ошибка)

Подробности

Контекст

Я работаю над проектом Cmake C ++, который правильно скомпилирован в Mac OS, но не в Linux (Ubuntu), и при расследовании возможных причин я обнаружил проблему ниже.

Проблема

Я включил модуль PkgConfig в файл CMakeLists.txt, написав:

find_package(PkgConfig REQUIRED)    

После этого, чтобы использовать библиотеку, я установил переменную среды PKG_CONFIG_PATH, написав:

set(ENV{PKG_CONFIG_PATH} "/usr/local/opt/thelibrary/pkgconfig:$ENV{PKG_CONFIG_PATH}")

Наконец, я поместил эту инструкцию для поиска в библиотеке.

pkg_check_modules(THELIBRARY thelibrary)

Наконец, для отладки я попытался напечатать список включенных каталогов, написав:

MESSAGE( STATUS "THELIBRARY DIRS: " ${THELIBRARY_INCLUDE_DIRS} )

Проблема в том, что это сработало , фактически он напечатал списокиз включенных каталогов, но проблема в том, что самый важный отсутствует.На самом деле вывод выглядит примерно так:

/opt/auxlib1/include/opt/auxlib2/include ...

, где auxlib1, auxlib2 и т. Д. Являются вспомогательными каталогами включения, которые мне нужно скомпилировать.

Но я также ожидал, что каталог /opt/thelibrary/include на выходе, который выводится, если я использую команду pkg-config на терминале, как сказано в начале.Как это возможно, что только этот каталог не печатается?

1 Ответ

0 голосов
/ 23 мая 2018

Благодаря предложению Цыварева (удаляя CMakeCache.txt) я понял, в чем причина, и, поскольку это может случиться с другими людьми, надеюсь, это объяснение поможет.

Причина, по которой каталог /opt/thelibrary/include не появляется в THELIBRARY_INCLUDE_DIRS, является ли этот файл CMakeCache.txt содержащим информацию о предыдущей версии библиотеки, заголовочные файлы которой были установлены в каталоге с несколько инымимя, которое было удалено , когда предыдущая версия была удалена .

Поскольку этот каталог больше не существует, он не появляется в THELIBRARY_INCLUDE_DIRS, и новый каталог не появляется просто потому, что файл CmakeCache.txt все еще указывает на предыдущую версию.

Решение: удалить CmakeCache.txt и повторно запустить cmake.

...