Правильный синтаксис:
matlab_get_all_valid_matlab_roots_from_registry(matlab_versions, matlab_roots)
, где matlab_versions
- входной аргумент и должен содержать список версий MATLAB, для которых вы хотите получить корни.Поскольку вы передаете пустой список в качестве входных данных, вы получаете нулевые корни.
Согласно источники , matlab_versions
происходят из extract_matlab_versions_from_registry_brute_force
или matlab_extract_all_installed_versions_from_registry
.Первый является внутренним макросом, а второй - функцией, доступной только в Windows.Таким образом, в Windows вы можете выполнить:
find_package(Matlab REQUIRED)
set(matlab_versions)
matlab_extract_all_installed_versions_from_registry(ON matlab_versions)
matlab_get_all_valid_matlab_roots_from_registry(matlab_versions, matlab_roots)
message(STATUS " !!!!! ${matlab_versions} ${matlab_roots} ${Matlab_ROOT_DIR} ####")
Кроме того, да, вам нужно выполнить find_package(Matlab)
, чтобы сделать определенные в нем функции доступными.
Примечание относительно cmake_minimum_required(VERSION 2.8)
:
Если у пользователя установлена старая версия CMake (2.8 была выпущена в 2009 году!), Вы можете обнаружить, что MATLAB пользователя не найден.В скрипте есть список известных версий MATLAB, которые нужно искать, поэтому вам всегда нужно использовать новейшую версию скрипта, чтобы найти новейшие версии MATLAB (или явно добавить информацию о выпуске, который вы используете). Версия сценария FindMatlab.cmake
в 2009 году явно искала MATLAB 7.0 и 7.0 SP1, которые были выпущены в 2004 году, уже на 5 лет устарели и не имели возможности искать более новые.версии MATLAB.Этот сценарий также не определил функцию matlab_get_all_valid_matlab_roots_from_registry
.
Так что, в общем, я рекомендую вам искать используемые вами функции CMake и требовать версию CMake, поддерживающую эти функции.Я знаю, что в сценариях CMake принято называть «require 2.8», но это не всегда лучший выбор.В случае с MATLAB это, безусловно, не лучший выбор.