MATLAB предоставляет встроенные средства для компиляции скриптов и функций в автономные исполняемые файлы формата .exe с помощью инструмента MATLAB Compiler. Это особенно актуально при необходимости распространения приложения среди пользователей, не имеющих установленного MATLAB. Компиляция позволяет избежать раскрытия исходного кода и обеспечивает стабильную работу программы в заданной среде исполнения.
Для создания EXE-файла требуется наличие установленного пакета MATLAB Compiler, входящего в состав MATLAB, начиная с редакции R2016b и выше. Процесс начинается с подготовки основной функции, которую необходимо оформить в виде отдельного файла с именем, совпадающим с названием функции. Внутри не допускается использование команд, требующих интерактивного ввода без соответствующей обработки, поскольку это приведёт к сбою при выполнении EXE.
Сборка выполняется с помощью команды mcc. Например, mcc -m mainFunction.m
создаёт исполняемый файл на основе указанной функции. Дополнительно можно указать внешние файлы и параметры командной строки, если они используются в логике приложения. В результате компиляции формируется набор файлов, включая EXE и вспомогательные библиотеки, которые необходимо распространять совместно либо упаковывать в инсталлятор.
Для запуска EXE-файла на целевой машине требуется установить MCR (MATLAB Runtime) соответствующей версии. Убедитесь, что она соответствует версии MATLAB, использованной при компиляции. MCR можно загрузить с официального сайта MathWorks и распространять вместе с приложением, соблюдая условия лицензии.
Настройка среды MATLAB Compiler для создания EXE
Перед компиляцией необходимо убедиться, что установлен MATLAB Compiler. Проверить наличие можно командой ver
в командном окне. В списке установленных продуктов должен присутствовать «MATLAB Compiler».
Установите путь к проектной папке с исходными файлами с помощью команды cd
. Все файлы, используемые в проекте, включая функции, GUI, вспомогательные скрипты и зависимости, должны находиться в этой директории или быть явно указаны при сборке.
Откройте MATLAB Compiler через команду compiler.build.standaloneApplication
или через графический интерфейс: вкладка Apps → Application Compiler.
В графическом интерфейсе укажите главный файл (например, main.m
) в поле Main file. В разделе Files required for your application to run добавьте все вспомогательные файлы, не обнаруженные автоматически. Убедитесь, что пути к этим файлам корректны.
В разделе Additional runtime settings отключите опцию «Runtime downloaded from web», если требуется офлайн-дистрибутив. В этом случае компилятор включит MATLAB Runtime в установочный пакет, увеличив его размер, но исключив необходимость подключения к интернету.
Выберите версию MATLAB Runtime, совместимую с целевой системой. Для этого используется параметр 'RuntimeVersion'
при вызове compiler.build.standaloneApplication
. Пример:
compiler.build.standaloneApplication('main.m', 'RuntimeVersion', '9.12')
При необходимости задать имя выходного EXE-файла, используйте параметр 'ExecutableName'
:
compiler.build.standaloneApplication('main.m', 'ExecutableName', 'MyApp')
Проверьте конфигурацию опции Output folder. Убедитесь, что путь не содержит кириллических символов и пробелов. Это исключает ошибки при запуске сборки.
Перед компиляцией сохраните проект с расширением .prj
для повторного использования и автоматизации сборки через скрипты.
Подготовка основного скрипта или функции к компиляции
Перед компиляцией необходимо убедиться, что основной файл – функция или скрипт – соответствует требованиям MATLAB Compiler. Файл должен иметь расширение .m
и начинаться с чётко определённой точки входа. Для функций это заголовок с именем, аргументами и переменными выхода. Для скриптов – отсутствие зависимостей от переменных внешней рабочей области.
Избегайте использования команд clear
, clc
, close all
и других, влияющих на среду выполнения, так как поведение таких команд в исполняемом файле может отличаться от среды MATLAB. Все пути к файлам и директориям должны быть заданы явно с помощью fullfile
или абсолютных путей – относительные пути могут быть интерпретированы некорректно в скомпилированном приложении.
Проверьте, что используемые функции и файлы находятся в текущей рабочей папке проекта или включены в список зависимостей. Использование функции matlab.codetools.requiredFilesAndProducts
позволяет выявить все внешние зависимости. Удалите все вызовы uigetfile
, uiputfile
, input
и других интерактивных элементов, если вы не реализуете пользовательский интерфейс через GUIDE или App Designer – они требуют отдельной обработки при компиляции.
Если скрипт зависит от переменных конфигурации, перенесите их в отдельный .mat
или .json
файл и загрузите программно через load
или jsondecode(fileread(...))
. Это обеспечит корректную работу независимо от среды запуска. Исключите использование eval
, так как он затрудняет анализ зависимостей и может быть недоступен в скомпилированной версии.
Убедитесь, что весь код поддерживается MATLAB Compiler: некоторые функции, например, связанные с Java, ActiveX и COM-объектами, не компилируются. Проверку можно выполнить с помощью утилиты mcc -n
, которая покажет возможные проблемы без компиляции.
Указание входных и выходных параметров при сборке
Для корректной генерации EXE-файла в MATLAB с помощью Application Compiler необходимо явно задать сигнатуру входных и выходных параметров основной функции. Это критически важно при использовании нескольких аргументов или комплексных структур данных.
В окне Main File выберите основной файл, содержащий функцию, которую требуется скомпилировать. После этого появится поле Additional files required for your application to run – добавьте все вспомогательные файлы, необходимые для выполнения функции, включая скрипты, MAT-файлы и пользовательские классы.
Нажмите Settings и перейдите в раздел Runtime Settings. Здесь задается количество входных и выходных аргументов. Если функция, например, имеет вид [out1, out2] = myFunc(in1, in2, in3)
, то:
– Установите Number of input arguments: 3
– Установите Number of output arguments: 2
Порядок аргументов должен строго соответствовать определению функции. Для передачи строковых и числовых параметров используйте соответствующие типы при вызове из командной строки Windows: строки – в кавычках, числовые значения – без.
При компиляции функции, использующей переменное число входов или выходов (varargin
, varargout
), фиксируйте максимальное ожидаемое количество параметров. Иначе при вызове EXE-файла возможна ошибка несоответствия сигнатуры.
После задания параметров убедитесь, что тестовый вызов функции в MATLAB работает с теми же аргументами, которые будут использоваться в EXE. Это позволяет заранее выявить ошибки типов данных или неверную интерпретацию параметров в среде выполнения.
Работа с зависимостями и дополнительными файлами
При создании EXE-файла в MATLAB через Application Compiler
, необходимо явно указать все зависимости, которые не входят в состав основного кода. Автоматическое определение не всегда корректно выявляет функции, вызываемые динамически (например, через feval
или eval
), поэтому такие случаи требуют ручного добавления файлов в проект.
Файлы данных, такие как .mat
, .txt
, .csv
или любые другие, используемые функцией load
или fopen
, также должны быть добавлены в секцию «Files required for your application to run» при компиляции. Их расположение после компиляции меняется, поэтому необходимо использовать функцию ctfroot
или fullfile(ctfroot, 'имя_файла')
для корректного доступа к ним во время выполнения.
Если приложение зависит от сторонних M-файлов, библиотек или классов, которые не входят в MATLAB Runtime, они должны быть включены вручную. Это касается также файлов, находящихся вне текущей папки проекта или не добавленных в путь MATLAB (addpath
не влияет на содержимое EXE).
При использовании пользовательских GUI (например, созданных в GUIDE или App Designer), необходимо удостовериться, что все файлы .fig
и .mlapp
добавлены в проект. Для App Designer также требуется указать зависимости, используемые внутри компонента, если они не определены явно.
Рекомендуется использовать команду matlab.codetools.requiredFilesAndProducts
перед компиляцией для получения списка всех зависимостей. Полученные файлы следует сверить с содержимым проекта и добавить недостающие вручную.
Проверка работы EXE-файла вне MATLAB
После компиляции MATLAB-программы в исполняемый EXE-файл с помощью mcc
, необходимо убедиться в его корректной работе на целевой системе. Прежде всего, проверьте наличие установленного MATLAB Runtime соответствующей версии. Его номер должен точно совпадать с версией MATLAB, использованной при компиляции. Узнать необходимую версию можно с помощью команды ver
в MATLAB или просмотрев файл readme.txt
, созданный компилятором.
Скопируйте EXE-файл и все дополнительные ресурсы (файлы данных, конфигурации, модели) в отдельную директорию на тестовой машине, где MATLAB не установлен. Добавьте путь к MATLAB Runtime в переменную окружения PATH
либо используйте файл install_for_redistribution
, автоматически создаваемый при компиляции, для корректной настройки окружения.
Если приложение взаимодействует с внешними файлами, проверьте корректность относительных путей и прав доступа. Использование абсолютных путей в коде приведёт к сбоям при переносе. Замените их вызовом fullfile
и pwd
для определения текущей директории выполнения.
Проверьте работу всех функций, особенно тех, которые зависят от сторонних библиотек или системных компонентов. Использование команд isdeployed
и ctfroot
внутри кода поможет адаптировать поведение приложения под режим запуска вне MATLAB.
Решение распространённых ошибок при компиляции
Компиляция MATLAB-кода в EXE часто сопровождается рядом специфических ошибок. Для эффективного их устранения важно понимать причины и методы диагностики.
- Ошибка отсутствия функций при запуске EXE
Часто возникает, если не включены все необходимые зависимости. Используйте опцию
-a
вmcc
для явного добавления дополнительных файлов и библиотек. - Несовместимость версий MATLAB и MATLAB Compiler
Версия компилятора должна совпадать с версией MATLAB, в которой писался код. Проверяйте это с помощью
ver
и обновляйте компоненты. - Ошибка «Undefined function or variable»
Причина – динамическое создание функций или использование функций, отсутствующих в пути компиляции. Решение: явно укажите все функции через
mcc -a
или объедините скрипты. - Проблемы с файлами данных и ресурсами
Не забудьте добавить все внешние файлы с помощью ключа
-a
. Проверяйте относительные пути внутри кода – при компиляции они меняются. - Ошибка нехватки памяти при компиляции
Часто связана с слишком большим объёмом данных в workspace. Очистите переменные перед компиляцией и минимизируйте использование глобальных данных.
- Проблемы с вызовом GUI-компонентов
MATLAB Compiler требует явного указания всех GUI-файлов (.fig). Добавьте их через
mcc -a
. Убедитесь, что все колбэки и компоненты корректно подключены. - Ошибка при запуске EXE на целевой машине
Проверьте наличие установленного MATLAB Runtime, соответствующего версии компилятора. Неправильная версия или отсутствие приводит к ошибкам загрузки.
Для отладки используйте опцию -v
при компиляции, чтобы получить подробный лог. Это поможет выявить пропущенные файлы и другие проблемы.
Вопрос-ответ:
Как в MATLAB создать исполняемый файл EXE из своего скрипта?
Для создания исполняемого файла EXE из MATLAB-скрипта необходимо использовать MATLAB Compiler. Сначала нужно подготовить функцию или скрипт, который будет скомпилирован. Затем в MATLAB открыть приложение Compiler, выбрать тип проекта «Application Compiler», указать основной файл, а также необходимые файлы и зависимости. После настройки параметров компиляции запустить процесс, который создаст папку с EXE-файлом и необходимыми библиотеками для запуска на других компьютерах без MATLAB.
Какие ограничения есть при компиляции MATLAB-кода в EXE?
При компиляции нужно учитывать, что не все функции MATLAB поддерживаются в скомпилированном приложении. Например, интерактивные графические элементы, требующие MATLAB-окружения, могут работать некорректно. Также для работы EXE-файла на целевой машине требуется установленный MATLAB Runtime, совместимый с версией MATLAB, в которой происходила компиляция. Кроме того, размер итогового файла обычно больше, чем исходного скрипта, из-за включения библиотек.
Как сделать так, чтобы созданный EXE-файл работал на компьютерах без установленного MATLAB?
Для запуска EXE-файла на компьютере без MATLAB необходимо установить MATLAB Runtime — бесплатный набор библиотек, который обеспечивает выполнение скомпилированных приложений. MATLAB Runtime нужно скачать с сайта MathWorks, выбрав версию, совпадающую с версией MATLAB, на которой был создан EXE. После установки MATLAB Runtime EXE-файл сможет работать автономно без полной установки MATLAB.
Можно ли включить внешние файлы данных или настройки в EXE, созданный в MATLAB?
Да, включить внешние файлы возможно. При компиляции через Application Compiler можно добавить дополнительные файлы и папки в раздел «Files required for your application to run». Это позволяет, например, упаковать конфигурационные файлы, изображения, базы данных и другие необходимые ресурсы вместе с EXE. При запуске приложение будет иметь доступ к этим файлам в относительном расположении, что упрощает переносимость.
Какие основные шаги стоит выполнить, чтобы отладить приложение после создания EXE?
Отладка скомпилированного EXE отличается от работы в MATLAB. Для диагностики ошибок рекомендуется сначала проверять скрипт в MATLAB на наличие исключений и предупреждений. В процессе компиляции можно включить опцию создания журнала выполнения (логов). Если приложение падает, стоит проверить версии MATLAB Runtime и убедиться, что все необходимые файлы подключены. При необходимости логика программы должна содержать обработчики ошибок для информирования пользователя о проблемах в работе.
Как в MATLAB создать исполняемый файл EXE из своего скрипта или функции?
Чтобы получить исполняемый файл EXE из MATLAB-кода, нужно использовать MATLAB Compiler — специальный инструмент для компиляции. В первую очередь необходимо подготовить функцию или скрипт, который должен работать автономно. Затем с помощью команды `mcc` или через графический интерфейс MATLAB Compiler Project можно упаковать ваш код в EXE. При этом важно учитывать, что для запуска сгенерированного файла на другом компьютере должен быть установлен MATLAB Runtime соответствующей версии.