В этом примере показано, как можно переместить сгенерированный код и скомпилировать его в другой среде разработки. Используйте packNGo, чтобы создать ZIP-файл, содержащий сгенерированный исходный код, информацию о сборке и файлы строения CMake. В целевой среде разработки используйте функцию codebuild для создания окончательной библиотеки или исполняемого файла.
Откройте модель.
rtwdemo_codebuild
Не компилируйте автоматически код, сгенерируйте make-файл или упакуйте сгенерированный код и программные продукты.
set_param('rtwdemo_codebuild', 'GenerateMakefile', 'off'); set_param('rtwdemo_codebuild', 'PackageGeneratedCodeAndArtifacts', 'off');
Запустите команду генерации кода.
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 29.238s
Сгенерируйте файлы строения CMakeLists.txt.
buildFolder = RTW.getBuildDir('rtwdemo_codebuild').BuildDirectory; codebuild(buildFolder, 'BuildMethod', 'cmake');
Запустите packNGo, упаковав файлы иерархически.
packNGo(buildFolder, 'packType', 'hierarchical', 'nestedZipFiles', false);
Это необязательный шаг. Для примера, если текущая среда разработки является компьютером 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 можно использовать стороннюю программу CMake для генерации файлов make или рабочих областей для окружения компилятора по вашему выбору. Если CMake установлен на вашем компьютере разработчика, создайте исполняемый файл, запустив эти команды в Командном окне MATLAB:
cd(rtwdemo_codebuild_top_component_folder)
!cmake .
!cmake --build .