В этом примере показано, как можно переместить сгенерированный код и скомпилировать его в другой среде разработки. Используйте packNGo, чтобы создать zip-файл, который содержит сгенерированный исходный код и информацию о сборке. В вашей целевой среде разработки используйте функцию codebuild, чтобы создать итоговую библиотеку или исполняемый файл.
Откройте модель.
rtwdemo_codebuild
Автоматически не компилируйте код или генерируйте make-файл.
set_param('rtwdemo_codebuild', 'GenerateMakefile', 'off');
После генерации кода создайте zip-файл, который содержит исходный код и файлы информации о сборке.
set_param('rtwdemo_codebuild', 'PackageGeneratedCodeAndArtifacts', 'on');
Запустите команду генерации кода.
slbuild('rtwdemo_codebuild');
### Starting serial model reference code generation build ### Successfully updated the model reference code generation target for: rtwdemo_codebuild_ref ### Starting build procedure for: rtwdemo_codebuild ### Successful completion of code generation for: rtwdemo_codebuild Build Summary Code generation targets built: Model Action Rebuild Reason ================================================================================ rtwdemo_codebuild_ref Code generated rtwdemo_codebuild_ref.c does not exist. Top model targets built: Model Action Rebuild Reason ===================================================================================== rtwdemo_codebuild Code generated Code generation information file does not exist. 2 of 2 models built (0 models already up to date) Build duration: 0h 0m 44.826s
Проверяйте, что сгенерированный код упакован как zip-файл.
dir rtwdemo_codebuild.zip
rtwdemo_codebuild.zip
Это - дополнительный шаг. Например, если ваша текущая среда разработки является компьютером Linux, можно скопировать zip-файл в компьютер Windows и затем выполнить последующие шаги на том компьютере.
Разархивируйте файлы.
rtwdemo_codebuild_files = unzip('rtwdemo_codebuild.zip');
Идентифицируйте папку, содержащую разархивированный код для главного компонента.
rtwdemo_codebuild_top_component_folder = fileparts(rtwdemo_codebuild_files{1});
Идентифицируйте набор инструментальных средств по умолчанию (на основе компилятора, выбранного mex - настройка).
defaultToolchain = coder.make.getDefaultToolchain;
Создайте исполняемый файл.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', defaultToolchain);
Проверяйте, что исполняемый файл производится.
dir(fullfile(rtwdemo_codebuild_top_component_folder, '..', 'rtwdemo_codebuild*'))
rtwdemo_codebuild.exe rtwdemo_codebuild_grt_rtw
Выберите make-файл шаблона для текущей платформы.
if ispc % With ert_vcx64.tmf, you must have Microsoft Visual C++ installed. If % it is not installed, specify ert_lcc64.tmf to use lcc-win64 instead. templateMakefile = 'ert_vcx64.tmf'; else templateMakefile = 'ert_unix.tmf'; end
Создайте исполняемый файл.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', templateMakefile);
На Windows создайте файл определения, который задает экспортируемые символы.
if ispc exportsFile = fullfile... (rtwdemo_codebuild_top_component_folder, 'rtwdemo_codebuild.def'); fid = fopen(exportsFile, 'w'); fwrite(fid, ['EXPORTS' newline]); fwrite(fid, ['rtwdemo_codebuild_initialize' newline]); fwrite(fid, ['rtwdemo_codebuild_step' newline]); fwrite(fid, ['rtwdemo_codebuild_terminate' newline]); fclose(fid); end
Создайте разделяемую библиотеку.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'SHARED_LIBRARY');
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'STATIC_LIBRARY');
Сгенерируйте иерархию платформы и компилятора независимые файлы CMakeLists.txt
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', 'CMake');
С файлами CMakeLists.txt можно использовать стороннюю программу CMake, чтобы сгенерировать make-файлы или рабочие области для среды компилятора по вашему выбору. Если CMake установлен на вашем компьютере разработчика, создайте исполняемый файл путем выполнения этих команд в командном окне MATLAB:
cd(rtwdemo_codebuild_top_component_folder)
!cmake .
!cmake --build .