find_package с указанной версией в имени скрипта конфигурации - PullRequest
0 голосов
/ 29 декабря 2018

Мне нужно использовать mangrove (библиотека mongo ODM поверх mongo-c-driver и mongo-cxx-driver) и включить это в мой проект в качестве команды CMake ExternalProject_Add с зависимостью от mongo-c-driver / mongo-cxx-драйвер

mongocxx генерирует конфигурационные сценарии CMake с именами, такими как:

libmongocxx-config.cmake

libmongocxx-config-version.cmake

и никаких проблем, чтобы найти их мангровым с помощью этого скрипта:

set(LIBMONGOCXX_REQUIRED_VERSION 3.1.3)
set(LIBMONGOCXX_REQUIRED_ABI_VERSION v_noabi)
find_package(libmongocxx ${LIBMONGOCXX_REQUIRED_VERSION} REQUIRED)

Однако mongo-c-driver генерирует эти скрипты с именем, которое встраивает версию ABI в имена файлов.

libmongoc-1.0-config.cmake

libmongoc-1.0-config-version.cmake

и аналогичный код CMake:

set(LIBMONGOC_REQUIRED_VERSION 1.7.0)
set(LIBMONGOC_REQUIRED_ABI_VERSION 1.0)
find_package(LibMongoC ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)

can 'Сценарии не выясняются.

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

Итак, вопрос о технике CMake:

Есть ливозможность указать версию пакета, которая будет автоматически использоваться (в именах скриптов CMake) find_package для поиска?

1 Ответ

0 голосов
/ 29 декабря 2018

Согласно документации find_package , версия встроена в файл libmongocxx-config-version.cmake.

Это означает, что если вы хотите получить пакет libmongoc-1.0-config.cmake, вам следует использовать:

find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)
...