При переходе на CMake 3.17.3 (с 3.13.3) мы наткнулись на проблему с Python. В root CMakeLists.txt
теперь у нас есть:
find_package(Python3 REQUIRED COMPONENTS Interpreter)
Однако это не работает со следующим:
CMake Error at /home/abadura/cmake/cmake-3.17.3-Linux-x86_64/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
Could NOT find Python3 (missing: Python3_EXECUTABLE Interpreter)
Reason given by package:
Interpreter: Wrong major version for the interpreter "/build/ltesdkroot/Platforms/LINUX/MB_PS_LFS_REL_2020_07_0068/sdk/bld-tools/x86_64-pc-linux-gnu/bin/python"
Call Stack (most recent call first):
/home/abadura/cmake/cmake-3.17.3-Linux-x86_64/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:445 (_FPHSA_FAILURE_MESSAGE)
/home/abadura/cmake/cmake-3.17.3-Linux-x86_64/share/cmake-3.17/Modules/FindPython/Support.cmake:2437 (find_package_handle_standard_args)
/home/abadura/cmake/cmake-3.17.3-Linux-x86_64/share/cmake-3.17/Modules/FindPython3.cmake:309 (include)
CMakeLists.txt:20 (find_package)
, в то время как Python найдено (/build/ltesdkroot/Platforms/LINUX/MB_PS_LFS_REL_2020_07_0068/sdk/bld-tools/x86_64-pc-linux-gnu/bin/python
) сообщает версия Python 2.7.15+
.
Поиск и эксперименты обнаружил, что добавление:
set(Python3_FIND_STRATEGY VERSION)
перед find_package
помогает. С этим добавленным Python найдено:
-- Found Python3: /opt/python/x86_64/3.6.0/bin-wrapped/python3.6 (found version "3.6.0") found components: Interpreter
Теперь проблема в том, что Find Python3 документация утверждает следующее:
Python3_FIND_STRATEGY
Эта переменная определяет, как будет выполняться поиск. Для переменной Python3_FIND_STRATEGY
можно задать одно из следующих значений:
VERSION
: попробуйте найти самую последнюю версию во всех указанных местах. Это значение по умолчанию, если политика CMP0094 не определена или имеет значение OLD
. LOCATION
: поиск прекращается, как только обнаруживается версия, удовлетворяющая ограничениям версии. Это значение по умолчанию, если для политики CMP0094 установлено значение NEW
.
Итак, LOCATION
должен работать нормально, исходя из моего понимания описания. Он должен игнорировать /build/ltesdkroot/Platforms/LINUX/MB_PS_LFS_REL_2020_07_0068/sdk/bld-tools/x86_64-pc-linux-gnu/bin/python
, поскольку он не удовлетворяет ограничениям версии (это Python 2, а не Python 3) и должен продолжать поиск /opt/python/x86_64/3.6.0/bin-wrapped/python3.6
, который удовлетворяет ограничениям. (Для полноты картины я попытался добавить явную версию 3.6
в find_package
, и это ничего не изменило.)
Другой вопрос, следует ли мне устанавливать Python3_FIND_STRATEGY
или использовать CMP0094 прямо. В документации CMP0094 есть несколько пугающее предупреждение:
Примечание. Поведение политики OLD
устарело по определению и может быть удалено в будущем. версия CMake.
Итак, я не уверен, какой подход (установка Python3_FIND_STRATEGY
или активация OLD
для CMP0094 ) является желаемым (стабильным) подходом.