Этот пример показывает, как указать и использовать набор инструментальных средств, чтобы скомпилировать исполняемый файл. Этот пример использует Компилятор Intel®, но концепции и API, показанный ниже, могут использоваться для любого набора инструментальных средств. Зарегистрированный набор инструментальных средств может быть выбран из списка наборов инструментальных средств, и make-файл будет сгенерирован, чтобы создать код с помощью того набора инструментальных средств.
coderrandФункция coderrand.m просто генерирует случайное скалярное значение от стандартного равномерного распределения на открытом интервале (0,1).
type coderrandfunction y = coderrand %#codegen % Copyright 2012 The MathWorks, Inc. y = rand();
Набор инструментальных средств является набором инструментов, требуемых скомпилировать, соединить, загружать и работать на заданной платформе. Набор инструментальных средств имеет несколько инструментов, таких как компилятор, компоновщик и archiver. Каждый из этих инструментов может выбрать несколько вариантов, которые могут быть сгруппированы в настройки как Более быстрые Сборки, Более быстрые Выполнения, Отладка. Объект набора инструментальных средств описывает основную информацию набора инструментальных средств. Объект набора инструментальных средств имеет методы, чтобы описать все вышеупомянутое. Объект может быть сохранен в файл MATLAB и совместно использованный через установки.
edit intel_tc
tc = intel_tctc =
###########################################################################
# Toolchain Name: Intel v14 | nmake makefile (64-bit Windows)
# Supported Toolchain Version: 14
# Toolchain Specification Format Version: R2019a
# 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
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
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
Если codegen закончен, и вам установили компиляторы Intel, можно использовать system('coderrand.exe'), чтобы запустить исполняемый файл.
Можно сбросить TargetRegistry, чтобы удалить набор инструментальных средств, который вы указали выше.
delete ./rtwTargetInfo.m RTW.TargetRegistry.getInstance('reset');