Используйте генератор кода 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
В этом примере, настройке генерации кода для 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-файл, 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