Использование функции из FindMatlab.cmake - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь использовать matlab_get_all_valid_matlab_roots_from_registry() из FindMatlab.cmake и распечатать результаты с помощью этого сценария:

cmake_minimum_required(VERSION 2.8)

find_package(Matlab REQUIRED)

matlab_get_all_valid_matlab_roots_from_registry(a b)

message("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
message(STATUS " !!!!! ${a} ${b} ${Matlab_ROOT_DIR} ####")
message("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")

Необходимо ли мне сначала позвонить find_package(), прежде чем звонить matlab_get_all_valid_matlab_roots_from_registry()?

Вывод скрипта не печатает содержимое переменных a и b, которые являются возвращаемыми значениями этой функции. Это вывод:

1> Command line: c:\program files (x86)\microsoft visual studio\2017

\community\common7\ide\commonextensions\microsoft\cmake\CMake\bin\cmake.exe  -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\AppTeam\CMakeBuilds\6f0f93b4-4e73-e838-98c8-2bfd807d82bf\install\x64-Debug (default)"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe"  -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_MAKE_PROGRAM="c:\program files (x86)\microsoft visual studio\2017\community\common7\ide\commonextensions\microsoft\cmake\Ninja\ninja.exe" "C:\Users\AppTeam\Documents\bil\matlab\codegen\lib\mcadd"
1> Working directory: C:\Users\AppTeam\CMakeBuilds\6f0f93b4-4e73-e838-98c8-2bfd807d82bf\build\x64-Debug (default)
1> --  !!!!!   C:/Program Files/MATLAB/R2018b ####
1> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1> -- Configuring done

Кажется, переменная Matlab_ROOT_DIR в порядке, но я бы хотел найти все установки MATLAB, используя matlab_get_all_valid_matlab_roots_from_registry(), но выходные переменные не отображаются. Что я делаю не так?

1 Ответ

1 голос
/ 25 марта 2019

Правильный синтаксис:

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 это, безусловно, не лучший выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...