exponenta event banner

Компиляция кода в другой среде разработки

В этом примере показано, как можно переместить созданный код и скомпилировать его в другой среде разработки. Используйте packNGo для создания ZIP-файла, содержащего созданный исходный код, сведения о построении и файлы конфигурации CMake. В целевой среде разработки используйте функцию codebuild для создания окончательной библиотеки или исполняемого файла.

Настройка модели

Откройте модель.

rtwdemo_codebuild

Не следует автоматически компилировать код, создавать make-файл или создавать пакеты кода и артефактов.

set_param('rtwdemo_codebuild', 'GenerateMakefile', 'off');
set_param('rtwdemo_codebuild', 'PackageGeneratedCodeAndArtifacts', 'off');

Создание файлов конфигурации кода и CMake

Выполните команду создания кода.

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');

Сгенерированный пакетом код и файлы конфигурации 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 -setup).

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  

Создание исполняемого файла с помощью Makefile шаблона по умолчанию

Выберите файл создания шаблона для текущей платформы.

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');

Использовать файлы конфигурации CMake

С помощью файлов CMakeLists.txt можно использовать стороннее средство CMake для создания makefile или рабочих областей для выбранной среды компилятора. Если на компьютере разработки установлена программа CMake, создайте исполняемый файл, выполнив следующие команды в окне команд MATLAB:

  cd(rtwdemo_codebuild_top_component_folder)
  !cmake .
  !cmake --build .

См. также

|

Связанные темы