Как включить поддержку pkg-config в eigen3 в Windows?

Я компилирую стороннюю библиотеку, которая использует следующие команды для поиска Eigen3:

find_package( PkgConfig )
pkg_check_modules( EIGEN3 REQUIRED eigen3 )
include_directories(${EIGEN3_INCLUDE_DIRS})

Команда find_package( PkgConfig ) выполняется правильно, поскольку я указал переменную PKG_CONFIG_EXECUTABLE. Но pkg_check_modules( EIGEN3 REQUIRED eigen3 ) возвращает ошибку:

-- Проверка модуля 'eigen3'

-- Пакет 'eigen3' не найден

На официальной веб-странице Eigen3 говорится, что нет необходимости использовать CMake или что-либо устанавливать. Мне потребовалось довольно много времени, чтобы понять, что это утверждение неверно. Поэтому я выполнил следующее, чтобы скомпилировать и установить Eigen3 (версия 3.3.5):

cmake -DCMAKE_CONFIGURATION_TYPES=Release -DCMAKE_INSTALL_PREFIX=E:\3rd-parties\eigen-3.3.5\install_ -G"Visual Studio 14 2015 Win64" ..

Процесс компиляции и установки прошел успешно, потому что я не видел сбоев в VS2015. Но когда я возвращаюсь в папку сборки сторонней библиотеки и снова запускаю cmake, я получаю точно такую ​​же ошибку. Eigen3 официальный сайт предоставляет только инструкции с использованием find_package, но не pkg-config.exe, поэтому я затем поискал в Google и нашел этот thread. В ответе говорится, что нам нужно включить поддержку pkg-config в cmake eigen3. Я не знаю, как его включить. Есть ли какая-то конкретная переменная CMake для этой цели? Поскольку это новая проблема, и на на главной странице Eigen написано "Чтобы получить помощь, stackoverflow — ваш лучший ресурс. поэтому я прихожу сюда за помощью. Мой вопрос: как включить поддержку pkg-config в eigen3? Или, говоря иначе: как передать команду pkg_check_modules( EIGEN3 REQUIRED eigen3 ) cmake? Большое спасибо.

P.S. Работаю на Windows 10.


person user5280911    schedule 02.12.2018    source источник


Ответы (1)


Согласно Eigen3 источники, за поддержку pkg-config отвечает опция EIGEN_BUILD_PKGCONFIG.

В Windows вся опция отключена, но вы можете попробовать установить ее:

cmake -DEIGEN_BUILD_PKGCONFIG=ON <... other arguments>

При использовании pkg-config для поиска Eigen3 в сценарии CMake убедитесь, что каталог установки Eigen3 указан в переменной CMAKE_PREFIX_PATH. (Если версия CMake, используемая проектом, ниже 3.1, то вам необходимо дополнительно установить PKG_CONFIG_USE_CMAKE_PREFIX_PATH на ON, чтобы указать модулю pkgconfig использовать переменную CMAKE_PREFIX_PATH. Подробнее см. в документация для модуля pkgconfig.)

person Tsyvarev    schedule 02.12.2018
comment
Спасибо за ответ. Я добавил параметр EIGEN_BUILD_PKGCONFIG при сборке Eigen3, и он работает в Windows. Создается новая папка E:\3rd-parties\eigen-3.3.5\install_\share\pkgconfig и в ней находится файл eigen3.pc. Но pkg-config.exe по-прежнему не может найти Eigen3 после того, как я попробовал разные значения для CMAKE_PREFIX_PATH. Не могли бы вы дать мне еще одну подсказку о том, как указать pkg-config, где находится установка Eigen3? Большое спасибо. - person user5280911; 03.12.2018
comment
Хм, передача опции -DCMAKE_PREFIX_PATH=E:/3rd-parties/eigen-3.3.5/install_ в cmake (или соответствующую настройку в графическом интерфейсе CMake) должна работать. - person Tsyvarev; 03.12.2018
comment
Извините, это не работает. В документе CMAKE_PREFIX_PATH говорится, что он поддерживает find_package(), find_program(), find_library(), find_file() и find_path(). Означает ли это, что CMAKE_PREFIX_PATH работает только с этими функциями, но не с pkg_check_modules()? - person user5280911; 03.12.2018
comment
Я угадал правильно, pkg_check_modules использует FindPkgConfig(), тогда как CMAKE_PREFIX_PATH работает только с find_package(), find_program(), find_library(), find_file() и find_path(). В FindPkgConfig() есть переменная, которая управляет использованием CMAKE_PREFIX_PATH — PKG_CONFIG_USE_CMAKE_PREFIX_PATH. Он включен по умолчанию, если минимальная версия CMake = 3.1, но сторонняя библиотека, которую я компилирую, устанавливает ее на 2.8 ..... Я отредактировал ваш ответ, чтобы включить этот трюк. - person user5280911; 03.12.2018
comment
Я перефразировал ваше редактирование в более простой форме, в которой отмечаются особенности младших версий CMake. - person Tsyvarev; 03.12.2018