Переместите Код к Другой Среде разработки с packNGo

Используйте генератор кода packNGo опция, чтобы сгенерировать код в одном месте. После генерации кода соберите параметры командной строки компилятора, переместите сгенерированный код в другое местоположение и скомпилируйте сгенерированный код в сочетании с пользовательским кодом.

Проверяйте платформу и созданный путь и папки

В данном примере у вас должен быть gcc набор инструментальных средств, работающий на платформе Linux®. После проверки этой платформы этот пример создает путь, папки и файлы.

Когда вы повторно выполняете пример, чтобы упростить моются сгенерированных файлов, папки работы (code_generation_area_dir и build_area_dir) являются отдельными от исходных файлов (models_dir и hand_code_dir).

Все местоположения исходного файла и папок используют пути, которые являются относительно папки, содержащей пример.M файл.

if ismac
    % Code to run on Mac platform
	disp('Platform (Macintosh) not supported.')
elseif ispc
    % Code to run on Windows platform
	disp('Platform (Windows) not supported.')
elseif isunix
originalFolder = pwd;
thisFilesFullName = mfilename( 'fullpath' );
thisFilesAbsolutePath = fileparts( thisFilesFullName );
modelsFolder = fullfile( thisFilesAbsolutePath, 'models_dir' );
codeGenerationRootFolder = ...
	fullfile( thisFilesAbsolutePath, 'code_generation_area_dir' );
buildAreaRootFolder = ...
	fullfile( thisFilesAbsolutePath, 'build_area_dir' );
handCodeFolder = ...
	fullfile( thisFilesAbsolutePath, 'hand_code_dir' );

Очистка

Чтобы устранить артефакты сборки из предыдущего выполнения примера, этот пример ищет и устраняет папки, содержащие эти побочные продукты предыдущих запусков.

if( 0 < exist( codeGenerationRootFolder, 'dir' ) )
	clear mex;
	rmdir( codeGenerationRootFolder, 's' );
else
% No previous codeGenerationRootFolder.
end
mkdir( codeGenerationRootFolder );

if( 0 < exist( buildAreaRootFolder, 'dir' ) )
	clear mex;
	rmdir( buildAreaRootFolder, 's' );
else
% No previous buildAreaRootFolder.
end
mkdir( buildAreaRootFolder );
if( 0 < exist( modelsFolder, 'dir' ) )
	clear mex;
	rmdir( modelsFolder, 's' );
else
% No previous modelsFolder.
end
mkdir( modelsFolder );
copyfile((fullfile(matlabroot,'toolbox','rtw','rtwdemos','rtwdemo_packngo','rtwdemo_packngo.slx')), ...
    (fullfile(modelsFolder,'rtwdemo_packngo.slx')),'f');
if( 0 < exist( handCodeFolder, 'dir' ) )
	clear mex;
	rmdir( handCodeFolder, 's' );
else
% No previous handCodeFolder.
end
mkdir( handCodeFolder );
copyfile((fullfile(matlabroot,'toolbox','rtw','rtwdemos','rtwdemo_packngo','main.c')), ...
    (fullfile(handCodeFolder,'main.c')),'f');
copyfile((fullfile(matlabroot,'toolbox','rtw','rtwdemos','rtwdemo_packngo','main.h')), ...
    (fullfile(handCodeFolder,'main.h')),'f');
directoriesToAddToMatlabPathCellStr = ...
	{ ...
	thisFilesAbsolutePath, ...
	modelsFolder ...
	};
for directoryIndex = 1 : numel( directoriesToAddToMatlabPathCellStr )
    currentDirectory = directoriesToAddToMatlabPathCellStr{ directoryIndex };
    addpath( currentDirectory );
end

Сгенерируйте Код и вывод .zip Файл с packNGo

В этом примере, настройке генерации кода для rtwdemo_packngo модель включает Сгенерировать коду только параметр (GenCodeOnly) и включает код Пакета и параметр артефактов (PackageGeneratedCodeAndArtifacts). Эти опции направляют генератор кода, чтобы создать packNGo архив (.zip файл) и остановка процесс сборки, не компилируя сгенерированный код. Компиляция происходит позже с интегрированным пользовательским кодом, который заменяет сгенерированный main.c файл.

cd( codeGenerationRootFolder );
modelBaseName = 'rtwdemo_packngo';
open_system( modelBaseName );
slbuild( modelBaseName );
close_system( modelBaseName );
### Starting build procedure for model: rtwdemo_packngo
### Successful completion of code generation for model: rtwdemo_packngo

Извлеките информацию о сборке из make-файла

При использовании подхода набора инструментальных средств для процесса сборки можно извлечь информацию о сборке из сгенерированного make-файла. Информация включает исходные файлы, файлы зависимости, и макроопределения и значения, которые появляются в make-файле. С текущим рабочим набором папки к папке, содержащей сгенерированный make-файл, rtwdemo_packngo.mk, в Командном окне, вводит:

cd( 'rtwdemo_packngo_grt_rtw' );
system('gmake -f rtwdemo_packngo.mk info')
gmake[5]: Entering directory '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw'
### PRODUCT = ../rtwdemo_packngo
### PRODUCT_TYPE = executable
### BUILD_TYPE = Top-Level Standalone Executable
### INCLUDES = -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I/mathworks/devel/bat/BR2019bd/build/matlab/extern/include -I/mathworks/devel/bat/BR2019bd/build/matlab/simulink/include -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src/ext_mode/common
### DEFINES = -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DMAT_FILE=0 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=rtwdemo_packngo -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DRT -DUSE_RTMODEL -DUNIX
### ALL_SRCS = /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw/rtwdemo_packngo.c /mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src/common/rt_main.c
### ALL_OBJS = rtwdemo_packngo.o rt_main.o
### LIBS = 
### MODELREF_LIBS = 
### SYSTEM_LIBS = -lm
### TOOLCHAIN_LIBS = 
### CFLAGS = -c -fwrapv -ansi -pedantic -Wno-long-long -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DMAT_FILE=0 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=rtwdemo_packngo -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DRT -DUSE_RTMODEL -DUNIX -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I/mathworks/devel/bat/BR2019bd/build/matlab/extern/include -I/mathworks/devel/bat/BR2019bd/build/matlab/simulink/include -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src/ext_mode/common
### LDFLAGS = -Wl,-rpath,/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64,-L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64
### SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64,-L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -Wl,--no-undefined
### CPPFLAGS = -c -fwrapv -std=c++03 -pedantic -Wno-long-long -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DMAT_FILE=0 -DONESTEPFCN=1 -DTERMFCN=1 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=rtwdemo_packngo -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DRT -DUSE_RTMODEL -DUNIX -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir -I/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I/mathworks/devel/bat/BR2019bd/build/matlab/extern/include -I/mathworks/devel/bat/BR2019bd/build/matlab/simulink/include -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src -I/mathworks/devel/bat/BR2019bd/build/matlab/rtw/c/src/ext_mode/common
### CPP_LDFLAGS = -Wl,-rpath,/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64,-L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64
### CPP_SHAREDLIB_LDFLAGS = -shared -Wl,-rpath,/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64,-L/mathworks/devel/bat/BR2019bd/build/matlab/bin/glnxa64 -Wl,--no-undefined
### ARFLAGS = ruvs
### MEX_CFLAGS = 
### MEX_CPPFLAGS = 
### MEX_LDFLAGS = 
### MEX_CPPLDFLAGS = 
### DOWNLOAD_FLAGS = 
### EXECUTE_FLAGS = 
### MAKE_FLAGS = -f rtwdemo_packngo.mk
gmake[5]: Leaving directory '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/code_generation_area_dir/rtwdemo_packngo_grt_rtw'

ans =

     0

Для получения информации о выполнении подобной операции на платформах Windows® смотрите model.bat описание в Управляет Файлами Процесса сборки (Simulink Coder).

Переместите сгенерированный код и пользовательский код к общему местоположению для процесса сборки

Чтобы интегрировать сгенерированный код и пользовательский код, этот пример перемещает файлы в общее местоположение для процесса сборки. Архив из packNGo опции разархивирован.

cd( buildAreaRootFolder );
generatedPackNGoArchiveShortName = ...
	[ modelBaseName, '.zip' ];
filesToCopyCellStr = ...
	{ ...
	fullfile( codeGenerationRootFolder, generatedPackNGoArchiveShortName ), ...
	fullfile( handCodeFolder, 'main.h' ), ...
	fullfile( handCodeFolder, 'main.c' ) ...
	};
fileCopyFunctionHandle = ...
	@( sourceFileFullName )copyfile( sourceFileFullName, buildAreaRootFolder );
for sourceFileIndex = 1 : numel( filesToCopyCellStr )
    currentSourceFile = filesToCopyCellStr{ sourceFileIndex };
    fileCopyFunctionHandle( currentSourceFile );
end
generatedPackNGoArchiveDestinationFullName = ...
	fullfile( buildAreaRootFolder, generatedPackNGoArchiveShortName );
unzip( generatedPackNGoArchiveDestinationFullName );

Создайте команду сборки

Чтобы скомпилировать сгенерированный код и интегрированный пользовательский код, этот пример создает команду сборки для gcc компилятора и инструментов что:

  • Компилирует сгенерированные и пользовательские исходные файлы

  • Задает необходимые папки, где препроцессор может определить местоположение включенных заголовочных файлов

  • Обеспечивает правильный -D аргументы для макросов препроцессора, которых требует сгенерированный код

Идентифицируйте исходные файлы для команды сборки

Сгенерированные исходные файлы находятся в папке, извлеченной из архива packNGo (.zip файл). Имя файла объединяется:

  • Имя модели

  • Системный конечный файл (выбранный в наборе конфигурации модели)

  • Папка генерации оригинального кода

generatedCodeSubFolderName = ...
	[ modelBaseName, '_grt_rtw' ];
generatedCodeFolderFullName = ...
	fullfile( buildAreaRootFolder, 'code_generation_area_dir', generatedCodeSubFolderName );
sourceFileFullNamesCellStr = ...
	{ ...
	fullfile( buildAreaRootFolder, 'main.c' ), ...
	fullfile( generatedCodeFolderFullName, 'rtwdemo_packngo.c' ) ...
	};

Идентифицируйте папки заголовочного файла

Необходимые папки заголовочного файла включают:

  • Пользовательские местоположения заголовочного файла

  • Сгенерированные местоположения заголовочного файла

  • Местоположения, которые содержат файлы, которые packNGo операция скопировала от папок установки MATLAB до архива packNGo

[ ~, matlabReleaseFolderName ] = fileparts( matlabroot() );
headerFileDirectoriesCellStr = ...
	{ ...
	buildAreaRootFolder, ...
	generatedCodeFolderFullName, ...
	fullfile( buildAreaRootFolder, matlabReleaseFolderName, 'extern', 'include' ), ...
	fullfile( buildAreaRootFolder, matlabReleaseFolderName, 'simulink', 'include' ) ...
	};

Идентифицируйте необходимые макросы препроцессора

Существует много макросов препроцессора, которые должны быть заданы, чтобы вести условную компиляцию в коде. Макро-имена и значения могут быть скопированы с defines.txt файл в папке сгенерированного кода.

commandLineDefinesCellStr = ...
	{ ...
	'MODEL=rtwdemo_packngo', ...
	'NUMST=1', ...
	'NCSTATES=0', ...
	'HAVESTDIO', ...
	'RT', ...
	'USE_RTMODEL', ...
	'UNIX', ...
	'MAT_FILE=0', ...
	'INTEGER_CODE=0', ...
	'MT=0', ...
	'CLASSIC_INTERFACE=0', ...
	'ALLOCATIONFCN=0', ...
	'ONESTEPFCN=1', ...
	'TERMFCN=1', ...
	'MULTI_INSTANCE_CODE=0', ...
	'TID01EQ=0' ...
	};

Подготовьте данные о массиве ячеек как строки

После сбора источника, заголовка, папки и макро-информации для команды сборки в данные о массиве ячеек, этот пример создает команду сборки путем реорганизации этих данных как правильно сформированных строк. Строки служат частью команды компиляции.

commandLineDefinesCompilerArgumentString = ...
	strjoin( strcat( '-D', commandLineDefinesCellStr ), ' ' );
sourceFilesCompilerArgumentString = ...
    ['"' strjoin( sourceFileFullNamesCellStr, '" "' ) '"'];
inclusionDirectoriesCompilerArgumentString = ...
    ['-I"' strjoin(headerFileDirectoriesCellStr, '" -I"') '"'];
compilationCommandString = ...
	[ ...
	'gcc', ' ', ...
	'-v', ' ', ...
	sourceFilesCompilerArgumentString, ' ', ...
	commandLineDefinesCompilerArgumentString, ' ', ...
	inclusionDirectoriesCompilerArgumentString ...
	];

Запустите команду компиляции

Команда компиляции:

[ compilationResult, compilationOutput ] = ...
	system( compilationCommandString );

Просмотрите результаты компиляции

Результаты используют соглашения операционной системы в возвращаемых значениях, потому что "система (...)" возвращает результаты операционной системы. В результате "0" указывает на успех, вместо "1" / "верный.

assert( ( 0 == compilationResult ), compilationOutput );
disp( compilationOutput );
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /mathworks/devel/sandbox/rjarrett/3p-internal/3p/sources/gcc-6.3/configure --with-gmp=/mathworks/devel/sandbox/rjarrett/3p-internal/3p/derived/glnxa64/gcc-6.3/gmp-4.3 --with-mpfr=/mathworks/devel/sandbox/rjarrett/3p-internal/3p/derived/glnxa64/gcc-6.3/mpfr --with-mpc=/mathworks/devel/sandbox/rjarrett/3p-internal/3p/derived/glnxa64/gcc-6.3/mpc --enable-languages=c,c++,fortran --with-bugurl=http://inside.mathworks.com/wiki/Suspected_compiler_bugs,_Debugging --enable-shared --enable-linker-build-id --enable-plugin --enable-checking=release --enable-multiarch --enable-gold --enable-ld=default --enable-libstdcxx-time=no --prefix=/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0 --with-pkgversion='MW GCC 6.3.0-GLIBC2.12-gold' --with-tune=generic --with-system-zlib --enable-multilib --with-multilib-list=m32,m64 --with-arch-directory=amd64 --with-arch-32=i586 --with-abi=m64
Thread model: posix
gcc version 6.3.0 (MW GCC 6.3.0-GLIBC2.12-gold) 
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/cc1 -quiet -v -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include -imultiarch x86_64-linux-gnu -iprefix /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/ -D MODEL=rtwdemo_packngo -D NUMST=1 -D NCSTATES=0 -D HAVESTDIO -D RT -D USE_RTMODEL -D UNIX -D MAT_FILE=0 -D INTEGER_CODE=0 -D MT=0 -D CLASSIC_INTERFACE=0 -D ALLOCATIONFCN=0 -D ONESTEPFCN=1 -D TERMFCN=1 -D MULTI_INSTANCE_CODE=0 -D TID01EQ=0 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/main.c -quiet -dumpbase main.c -mtune=generic -march=x86-64 -auxbase main -version -o /tmp/BR2019bd_1170825_64229/publish_examples4/ccZNOUCc.s
GNU C11 (MW GCC 6.3.0-GLIBC2.12-gold) version 6.3.0 (x86_64-pc-linux-gnu)
	compiled by GNU C version 6.3.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/include"
ignoring duplicate directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring duplicate directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include-fixed"
ignoring nonexistent directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include-fixed
 /usr/local/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C11 (MW GCC 6.3.0-GLIBC2.12-gold) version 6.3.0 (x86_64-pc-linux-gnu)
	compiled by GNU C version 6.3.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c26022ef40cbe05afcbd998c36f33b4e
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/bin/as -v -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include --64 -o /tmp/BR2019bd_1170825_64229/publish_examples4/ccFVc91j.o /tmp/BR2019bd_1170825_64229/publish_examples4/ccZNOUCc.s
GNU assembler version 2.28.1 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.28.1
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/cc1 -quiet -v -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include -imultiarch x86_64-linux-gnu -iprefix /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/ -D MODEL=rtwdemo_packngo -D NUMST=1 -D NCSTATES=0 -D HAVESTDIO -D RT -D USE_RTMODEL -D UNIX -D MAT_FILE=0 -D INTEGER_CODE=0 -D MT=0 -D CLASSIC_INTERFACE=0 -D ALLOCATIONFCN=0 -D ONESTEPFCN=1 -D TERMFCN=1 -D MULTI_INSTANCE_CODE=0 -D TID01EQ=0 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw/rtwdemo_packngo.c -quiet -dumpbase rtwdemo_packngo.c -mtune=generic -march=x86-64 -auxbase rtwdemo_packngo -version -o /tmp/BR2019bd_1170825_64229/publish_examples4/ccZNOUCc.s
GNU C11 (MW GCC 6.3.0-GLIBC2.12-gold) version 6.3.0 (x86_64-pc-linux-gnu)
	compiled by GNU C version 6.3.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/include"
ignoring duplicate directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring duplicate directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include-fixed"
ignoring nonexistent directory "/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include
 /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/include-fixed
 /usr/local/include
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/../../include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C11 (MW GCC 6.3.0-GLIBC2.12-gold) version 6.3.0 (x86_64-pc-linux-gnu)
	compiled by GNU C version 6.3.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.2, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c26022ef40cbe05afcbd998c36f33b4e
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/bin/as -v -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include -I /tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include --64 -o /tmp/BR2019bd_1170825_64229/publish_examples4/ccnAifvr.o /tmp/BR2019bd_1170825_64229/publish_examples4/ccZNOUCc.s
GNU assembler version 2.28.1 (x86_64-pc-linux-gnu) using BFD version (GNU Binutils) 2.28.1
COMPILER_PATH=/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/bin/
LIBRARY_PATH=/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../lib64/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-linux-gnu/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/lib/:/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'
 /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/collect2 -plugin /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/liblto_plugin.so -plugin-opt=/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/6.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/BR2019bd_1170825_64229/publish_examples4/cc7dwZYy.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/crtbegin.o -L/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0 -L/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc -L/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../../../x86_64-pc-linux-gnu/lib -L/mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/../../.. /tmp/BR2019bd_1170825_64229/publish_examples4/ccFVc91j.o /tmp/BR2019bd_1170825_64229/publish_examples4/ccnAifvr.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /mathworks/hub/3rdparty/internal/3349624/glnxa64/gcc-6.3.0/bin/../lib/gcc/x86_64-pc-linux-gnu/6.3.0/crtend.o /usr/lib/x86_64-linux-gnu/crtn.o
COLLECT_GCC_OPTIONS='-v' '-D' 'MODEL=rtwdemo_packngo' '-D' 'NUMST=1' '-D' 'NCSTATES=0' '-D' 'HAVESTDIO' '-D' 'RT' '-D' 'USE_RTMODEL' '-D' 'UNIX' '-D' 'MAT_FILE=0' '-D' 'INTEGER_CODE=0' '-D' 'MT=0' '-D' 'CLASSIC_INTERFACE=0' '-D' 'ALLOCATIONFCN=0' '-D' 'ONESTEPFCN=1' '-D' 'TERMFCN=1' '-D' 'MULTI_INSTANCE_CODE=0' '-D' 'TID01EQ=0' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/code_generation_area_dir/rtwdemo_packngo_grt_rtw' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/extern/include' '-I' '/tmp/BR2019bd_1170825_64229/publish_examples4/tpe76eb9af/ex21882019/build_area_dir/matlab/simulink/include' '-mtune=generic' '-march=x86-64'

Вызовите интегрированный, скомпилированный исполняемый файл

Выполнение исполняемого файла компиляции производит этот выход:

[ executionResult, executionOutput ] = system( './a.out' );
assert( ( 0 == executionResult ), executionOutput );
disp( executionOutput );
cd( originalFolder );
Input:	1.000000	Output:	42.000000
Input:	2.000000	Output:	84.000000
Input:	3.000000	Output:	126.000000
Input:	4.000000	Output:	168.000000
Input:	5.000000	Output:	210.000000

Факторы для перемещения кода на другие платформы или наборы инструментальных средств

В этом примере показано, как использовать packNGo, чтобы переместить код и интегрировать пользовательский код со сгенерированным кодом. Эти методы простота, перемещающая сгенерированный код на другие платформы (например, Linux® к Windows®). Разделы этого примера, которые показывают, как создать команду сборки, предоставляют информацию, которая поддерживает перемещение кода.

Команда сборки на целевой платформе (например, Microsoft Visual C/C ++ MSVC на Windows®) максимально близка к флагам инструмента сборки и определениям в команде сборки на исходной платформе (например, gcc на Linux®). Некоторые флаги и определения требуются (например, список источника и файлов зависимости). Другие флаги являются дополнительными (например, оптимизация компилятора варьируется среди компиляторов).

else
    disp('Platform not supported.')
end