В этом примере показано, как указать и использовать набор инструментальных средств, чтобы скомпилировать исполняемый файл. Этот пример использует Компилятор Intel®, но концепции и API, показанный ниже, могут использоваться для любого набора инструментальных средств. Зарегистрированный набор инструментальных средств может быть выбран из списка наборов инструментальных средств, и make-файл будет сгенерирован, чтобы создать код с помощью того набора инструментальных средств.
coderrand
ФункцияВ этом примере вы генерируете код для coderrand
функция. Эта функция MATLAB® просто генерирует случайное скалярное значение от стандартного равномерного распределения на открытом интервале (0,1).
type coderrand
function y = coderrand %#codegen % Copyright 2012 The MathWorks, Inc. y = rand();
Набор инструментальных средств является набором инструментов, который требуется для компиляции и соединения сгенерированного кода для заданной платформы. Набор инструментальных средств имеет несколько инструментов, таких как компилятор, компоновщик и архиватор. Каждый из этих инструментов может выбрать несколько вариантов, которые могут быть сгруппированы в настройки как Более быстрые Сборки, Более быстрые Запуски, Отладка. Объект набора инструментальных средств описывает основную информацию набора инструментальных средств. Объект набора инструментальных средств имеет методы, чтобы описать все вышеупомянутое. Объект может быть сохранен в файл MATLAB и совместно использованный через установки.
Этот пример использует файл определения набора инструментальных средств intel_tc.m
.
tc = intel_tc
tc = ########################################################################### # Toolchain Name: Intel v14 | nmake makefile (64-bit Windows) # Supported Toolchain Version: 14 # Toolchain Specification Format Version: 2021b # Toolchain Specification Revision: 1.0 ########################################################################### # Supported Host Platform = win64 # Supported Languages = C/C++ # --------------- # Setup/Cleanup # --------------- MATLAB Setup: (none) MATLAB Cleanup: (none) Shell Setup: call %ICPP_COMPILER14%\bin\compilervars.bat intel64 Shell Cleanup: (none) # ------------ # Attributes # ------------ RequiresBatchFile = true RequiresCommandFile = true TransformPathsWithSpaces = true # ---------------------------------------------------------------------- # Macros intrinsic to the toolchain or assumed to be defined elsewhere # ---------------------------------------------------------------------- # ldebug # conflags # cflags # -------- # MACROS # -------- MW_EXTERNLIB_DIR = $(MATLAB_ROOT)\extern\lib\win64\microsoft MW_LIB_DIR = $(MATLAB_ROOT)\lib\win64 CFLAGS_ADDITIONAL = -D_CRT_SECURE_NO_WARNINGS CPPFLAGS_ADDITIONAL = -EHs -D_CRT_SECURE_NO_WARNINGS LIBS_TOOLCHAIN = $(conlibs) CVARSFLAG = ########################################################################### # Build Tool: Intel C Compiler ########################################################################### Language : 'C' OptionsRegistry : {'C Compiler', 'CFLAGS'} InputFileExtensions : {Source} OutputFileExtensions : {Object} DerivedFileExtensions : {} SupportedOutputs : {*} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|' # --------- # Command # --------- CC = icl CC_PATH = # ------------ # Directives # ------------ CompileFlag = Debug = -Zi ErrorPattern = FileNamePattern = FileSeparator = \ Include = IncludeSearchPath = -I LineNumberPattern = OutputFlag = -Fo PreprocessFile = PreprocessorDefine = -D WarningPattern = # ----------------- # File Extensions # ----------------- Header = .h Object = .obj Source = .c ########################################################################### # Build Tool: Intel C/C++ Linker ########################################################################### Language : 'C' OptionsRegistry : {'Linker', 'LDFLAGS', 'Shared Library Linker', 'SHAREDLIB_LDFLAGS'} InputFileExtensions : {} OutputFileExtensions : {'Executable', 'Shared Library'} DerivedFileExtensions : {} SupportedOutputs : {coder.make.enum.BuildOutput.EXECUTABLE, coder.make.enum.BuildOutput.SHARED_LIBRARY} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|' # --------- # Command # --------- LD = xilink LD_PATH = # ------------ # Directives # ------------ Debug = FileSeparator = \ Library = -L LibrarySearchPath = -I LibrarySearchPathRuntime = OutputFlag = -out: # ----------------- # File Extensions # ----------------- Executable = .exe Shared Library = .dll ########################################################################### # Build Tool: Intel C++ Compiler ########################################################################### Language : 'C++' OptionsRegistry : {'C++ Compiler', 'CPPFLAGS'} InputFileExtensions : {Source} OutputFileExtensions : {Object} DerivedFileExtensions : {} SupportedOutputs : {*} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|' # --------- # Command # --------- CPP = icl CPP_PATH = # ------------ # Directives # ------------ CompileFlag = Debug = -Zi ErrorPattern = FileNamePattern = FileSeparator = \ Include = IncludeSearchPath = -I LineNumberPattern = OutputFlag = -Fo PreprocessFile = PreprocessorDefine = -D WarningPattern = # ----------------- # File Extensions # ----------------- Header = .hpp Object = .obj Source = .cpp ########################################################################### # Build Tool: Intel C/C++ Linker ########################################################################### Language : 'C++' OptionsRegistry : {'C++ Linker', 'CPP_LDFLAGS', 'C++ Shared Library Linker', 'CPP_SHAREDLIB_LDFLAGS'} InputFileExtensions : {} OutputFileExtensions : {'Executable', 'Shared Library'} DerivedFileExtensions : {} SupportedOutputs : {coder.make.enum.BuildOutput.EXECUTABLE, coder.make.enum.BuildOutput.SHARED_LIBRARY} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|' # --------- # Command # --------- CPP_LD = xilink CPP_LD_PATH = # ------------ # Directives # ------------ Debug = FileSeparator = \ Library = -L LibrarySearchPath = -I LibrarySearchPathRuntime = OutputFlag = -out: # ----------------- # File Extensions # ----------------- Executable = .exe Shared Library = .dll ########################################################################### # Build Tool: Intel C/C++ Archiver ########################################################################### Language : 'C' OptionsRegistry : {'Archiver', 'ARFLAGS'} InputFileExtensions : {} OutputFileExtensions : {Static Library} DerivedFileExtensions : {} SupportedOutputs : {coder.make.enum.BuildOutput.STATIC_LIBRARY} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|' # --------- # Command # --------- AR = xilib AR_PATH = # ------------ # Directives # ------------ Debug = FileSeparator = \ LibrarySearchPath = OutputFlag = -out: # ----------------- # File Extensions # ----------------- Static Library = .lib ########################################################################### # Build Tool: Download ########################################################################### Language : '' OptionsRegistry : {'Download', 'DOWNLOAD_FLAGS'} InputFileExtensions : {} OutputFileExtensions : {} DerivedFileExtensions : {} SupportedOutputs : {coder.make.enum.BuildOutput.EXECUTABLE} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<|' # --------- # Command # --------- DOWNLOAD = DOWNLOAD_PATH = # ------------ # Directives # ------------ (none) # ----------------- # File Extensions # ----------------- (none) ########################################################################### # Build Tool: Execute ########################################################################### Language : '' OptionsRegistry : {'Execute', 'EXECUTE_FLAGS'} InputFileExtensions : {} OutputFileExtensions : {} DerivedFileExtensions : {} SupportedOutputs : {coder.make.enum.BuildOutput.EXECUTABLE} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<|' # --------- # Command # --------- EXECUTE = $(PRODUCT) EXECUTE_PATH = # ------------ # Directives # ------------ (none) # ----------------- # File Extensions # ----------------- (none) ########################################################################### # Build Tool: NMAKE Utility ########################################################################### Language : '' OptionsRegistry : {'Make Tool', 'MAKE_FLAGS'} InputFileExtensions : {} OutputFileExtensions : {} DerivedFileExtensions : {} SupportedOutputs : {*} CommandPattern : '|>TOOL<| |>TOOL_OPTIONS<|' # --------- # Command # --------- MAKE = nmake MAKE_PATH = # ------------ # Directives # ------------ Comment = # DeleteCommand = @del DisplayCommand = @echo FileSeparator = \ ImpliedFirstDependency = $< ImpliedTarget = $@ IncludeFile = !include LineContinuation = \ MoveCommand = @ren ReferencePattern = \$\($1\) RunScriptCommand = @cmd /C # ----------------- # File Extensions # ----------------- Makefile = .mk ########################################################################### # Build Configuration : Faster Runs # Description : Minimize run time ########################################################################### ARFLAGS = /nologo CFLAGS = $(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL) /c /O2 CPPFLAGS = $(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL) /c /O2 CPP_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) CPP_SHAREDLIB_LDFLAGS = DOWNLOAD_FLAGS = EXECUTE_FLAGS = LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) MEX_CPPFLAGS = MEX_CPPLDFLAGS = MEX_CFLAGS = MEX_LDFLAGS = MAKE_FLAGS = -f $(MAKEFILE) SHAREDLIB_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) -dll -def:$(DEF_FILE) ########################################################################### # Build Configuration : Faster Builds # Description : Minimize compilation and linking time ########################################################################### ARFLAGS = /nologo CFLAGS = $(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL) /c /Od CPPFLAGS = $(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL) /c /Od CPP_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) CPP_SHAREDLIB_LDFLAGS = DOWNLOAD_FLAGS = EXECUTE_FLAGS = LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) MEX_CPPFLAGS = MEX_CPPLDFLAGS = MEX_CFLAGS = MEX_LDFLAGS = MAKE_FLAGS = -f $(MAKEFILE) SHAREDLIB_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) -dll -def:$(DEF_FILE) ########################################################################### # Build Configuration : Debug # Description : Build with debug information ########################################################################### ARFLAGS = /nologo $(ARDEBUG) CFLAGS = $(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL) /c /Od $(CDEBUG) CPPFLAGS = $(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL) /c /Od $(CPPDEBUG) CPP_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) $(CPPLDDEBUG) CPP_SHAREDLIB_LDFLAGS = DOWNLOAD_FLAGS = EXECUTE_FLAGS = LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) $(LDDEBUG) MEX_CPPFLAGS = MEX_CPPLDFLAGS = MEX_CFLAGS = MEX_LDFLAGS = MAKE_FLAGS = -f $(MAKEFILE) SHAREDLIB_LDFLAGS = $(ldebug) $(conflags) $(LIBS_TOOLCHAIN) -dll -def:$(DEF_FILE) $(LDDEBUG)
save intel_tc tc
Наборы инструментальных средств указаны через RTW.TargetRegistry
. Чтобы указать набор инструментальных средств, можно также использовать rtwTargetInfo
который загрузится системой автоматически.
copyfile myRtwTargetInfoCustom.txt rtwTargetInfo.m type rtwTargetInfo
function rtwTargetInfo(tr) %RTWTARGETINFO Registration file for custom toolchains. % Copyright 2012-2016 The MathWorks, Inc. tr.registerTargetInfo(@loc_createToolchain); end % ------------------------------------------------------------------------- % Create the ToolchainInfoRegistry entries % ------------------------------------------------------------------------- function config = loc_createToolchain config(1) = coder.make.ToolchainInfoRegistry; config(1).Name = 'Intel v14 | nmake makefile (64-bit Windows)'; config(1).FileName = fullfile(fileparts(mfilename('fullpath')), 'intel_tc.mat'); config(1).TargetHWDeviceType = {'*'}; config(1).Platform = {computer('arch')}; end
Теперь можно сбросить TargetRegistry
взять новый rtwTargetInfo
.
RTW.TargetRegistry.getInstance('reset');
Можно теперь создать объект конфигурации, который сконфигурирован, чтобы создать исполняемый файл с помощью нового набора инструментальных средств.
cfg = coder.config('exe'); cfg.CustomSource = 'coderrand_main.c'; cfg.CustomInclude = pwd; cfg.Toolchain = 'Intel v14';
Если вам не установили компиляторы Intel, можно использовать следующую команду, чтобы сгенерировать код и make-файл только.
cfg.GenCodeOnly = true;
Запустите codegen
сгенерировать код и make-файл, который использует новый набор инструментальных средств.
codegen -config cfg coderrand
Code generation successful.
Однажды codegen
закончен, и вам установили компиляторы Intel, можно использовать system('coderrand.exe')
запускать исполняемый файл.
Можно сбросить TargetRegistry
удалить набор инструментальных средств, который вы указали выше.
delete ./rtwTargetInfo.m RTW.TargetRegistry.getInstance('reset');