#cmake
#cmake
Вопрос:
Мой проект CMake зависит от пакета, в котором была ошибка. Ошибка была исправлена в выпусках исправлений для двух разных ветвей функций; допустим, ошибка исправлена в 2.4.4 и 2.5.1, но все еще присутствует в 2.4.3 и 2.5.0. Некоторые из моих пользователей застряли с набором функций 2.4 пакета dependency, а другие с 2.5, поэтому у меня проблема с внедрением 2.4.4 для первого и 2.5.1 для второго. Как я могу это сделать при вызове find_package? Если я вызову:
find_package(ExternalPackage 2.4.4 REQUIRED)
тогда это будет нормально для пользователей с 2.4, но это также позволит использовать 2.5.0; таким же образом, если я вызову:
find_package(ExternalPackage 2.5.1 REQUIRED)
тогда мой код не будет работать с 2.4.x. Есть ли способ это исправить? Спасибо.
Ответ №1:
Проверка версии пакета выполняется файлом версии, предоставленным пакетом. Единственное, что может повлиять на его поведение, — это EXACT
параметр, который вы можете отправить в find_package
.
Моей рекомендацией было бы проверить наличие версии 2.4.4
, но утверждать, что это не так 2.5.0
.
if(ExternalPackage_VERSION VERSION_EQUAL "2.5.0")
message(FATAL_ERROR "ExternalPackage must not be version 2.5.0. 2.4.4 or 2.5.1 or better is required.")
endif()
Комментарии:
1. Это кажется аккуратным и работающим решением, я воспользуюсь этим. Спасибо!