Вы можете использовать политику CMake CMP0000
, чтобы сообщить, был ли уже вызван cmake_minimum_required
.
Когда cmake_minimum_required
называется, CMP0000
автоматически устанавливается на NEW
, так что вы можете сделать:
cmake_policy(GET CMP0000 MinimumVersionIsSet)
if(NOT MinimumVersionIsSet STREQUAL "NEW")
cmake_minimum_required(VERSION 2.8.11)
endif()
Единственный способ, которым я могу видеть этот недостаток, если более высокого уровня CMakeLists.txt содержал что-то вроде:
cmake_minimum_required(VERSION 2.6)
cmake_policy(SET CMP0000 OLD)
перед тем как позвонить add_subdirectory
для вашего проекта. Это позволило бы установить политику NEW
, а затем сразу же установить ее на OLD
. Тем не менее, я считаю, что это очень маловероятный сценарий, поскольку для политики будет установлено только OLD
, чтобы разрешить вызов cmake_minimum_required
.
Сказав все это, я думаю, что ваш подход может быть немного рискованным. Скажем, проект верхнего уровня устанавливает минимальную требуемую версию до версии 2.6, и вам нужны функции, доступные только в 2.8. Поскольку ваш вызов cmake_minimum_required
пропущен, пользователи, работающие с CMake 2.6, получат больше таинственных сообщений об отказах (о неизвестных командах CMake), а не более сжатые «CMake 2.8.11 или выше». Вы используете версию 2.6.0 ».