Этот пример показывает, как создать файл определения набора инструментальных средств и объясняет каждый из включенных шагов. Пример основан на файле определения, используемом в Добавлении Пользовательского Набора инструментальных средств. Для получения дополнительной информации о рабочем процессе, смотрите Типичный Рабочий процесс.
function tc = intel_tc % INTEL_TC Creates a Intel v12.1 ToolchainInfo object. % This can be used as a template to add other toolchains on Windows. % Copyright 2012 The MathWorks,Inc. tc = coder.make.ToolchainInfo('BuildArtifact','nmake makefile'); tc.Name = 'Intel v12.1 | nmake makefile (64-bit Windows)'; tc.Platform = 'win64'; tc.SupportedVersion = '12.1'; tc.addAttribute('TransformPathsWithSpaces'); tc.addAttribute('RequiresCommandFile'); tc.addAttribute('RequiresBatchFile');
Предыдущий код:
Задает функцию, intel_tc
, который создает объект coder.make.ToolchainInfo
и присваивает его указателю, tc
.
Заменяет свойство BuildArtifact
создать make-файл для nmake вместо для gmake.
Значения присвоений к Name
, Platform
и свойствам SupportedVersion
для информационного и целей отображения.
Добавляют три пользовательских атрибута к свойству Attributes
, которые требуются этим набором инструментальных средств.
'TransformPathsWithSpaces'
преобразовывает пути, которые содержат пробелы, чтобы закоротить пути Windows®.
'RequiresCommandFile'
генерирует командный файл компоновщика, который вызывает компоновщика. Это избегает проблем с вызовами, которые превышают предел командной строки 256 символов.
'RequiresBatchFile'
создает файл .bat
, который вызывает приложение разработчика.
% ------------------------------ % Setup % ------------------------------ % Below we are using %ICPP_COMPILER12% as root folder where Intel Compiler is % installed. You can either set an environment variable or give full path to the % compilervars.bat file tc.ShellSetup{1} = 'call %ICPP_COMPILER12%\bin\compilervars.bat intel64';
Предыдущий код:
Присваивает системный вызов свойству ShellSetup
.
Метод coder.make.ToolchainInfo.setup
запускает эти системные вызовы, прежде чем он запустит инструменты, заданные свойством PrebuildTools
.
compilervars.bat
вызовов, который поставляется с компиляторами Intel®, чтобы получить набор переменных окружения для компилятора Intel и компоновщиков.
% ------------------------------ % Macros % ------------------------------ tc.addMacro('MW_EXTERNLIB_DIR',['$(MATLAB_ROOT)\extern\lib\' tc.Platform '\microsoft']); tc.addMacro('MW_LIB_DIR',['$(MATLAB_ROOT)\lib\' tc.Platform]); tc.addMacro('CFLAGS_ADDITIONAL','-D_CRT_SECURE_NO_WARNINGS'); tc.addMacro('CPPFLAGS_ADDITIONAL','-EHs -D_CRT_SECURE_NO_WARNINGS'); tc.addMacro('LIBS_TOOLCHAIN','$(conlibs)'); tc.addMacro('CVARSFLAG',''); tc.addIntrinsicMacros({'ldebug','conflags','cflags'}); |
Предыдущий код:
Использование метод coder.make.ToolchainInfo.addMacro
, чтобы задать макросы и значения присвоения им.
coder.make.ToolchainInfo.addIntrinsicMacros
использования, чтобы задать макросы, значения которых заданы набором инструментальных средств вне осциллографа вашего программного обеспечения MathWorks®.
% ------------------------------ % C Compiler % ------------------------------ tool = tc.getBuildTool('C Compiler'); tool.setName('Intel C Compiler'); tool.setCommand('icl'); tool.setPath(''); tool.setDirective('IncludeSearchPath','-I'); tool.setDirective('PreprocessorDefine','-D'); tool.setDirective('OutputFlag','-Fo'); tool.setDirective('Debug','-Zi'); tool.setFileExtension('Source','.c'); tool.setFileExtension('Header','.h'); tool.setFileExtension('Object','.obj'); tool.setCommandPattern('|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|');
Предыдущий код:
Создает объект инструмента сборки для компилятора C
Значения присвоений к свойствам объектов инструмента сборки
Создает директивы и расширения файла с помощью пар "имя-значение"
Устанавливает шаблон "команда".
Можно использовать метод setCommandPattern
, чтобы управлять использованием пробелов в командах. Например, эти две панели в OUTPUT_FLAG<||>OUTPUT
не разрешают пробел между выходным флагом и выводом.
% ------------------------------ % C++ Compiler % ------------------------------ tool = tc.getBuildTool('C++ Compiler'); tool.setName('Intel C++ Compiler'); tool.setCommand('icl'); tool.setPath(''); tool.setDirective('IncludeSearchPath','-I'); tool.setDirective('PreprocessorDefine','-D'); tool.setDirective('OutputFlag','-Fo'); tool.setDirective('Debug','-Zi'); tool.setFileExtension('Source','.cpp'); tool.setFileExtension('Header','.hpp'); tool.setFileExtension('Object','.obj'); tool.setCommandPattern('|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|');
Предыдущий код:
Создает объект инструмента сборки для компилятора C++
Очень похоже на объект инструмента сборки для компилятора C
% ------------------------------ % Linker % ------------------------------ tool = tc.getBuildTool('Linker'); tool.setName('Intel C/C++ Linker'); tool.setCommand('xilink'); tool.setPath(''); tool.setDirective('Library','-L'); tool.setDirective('LibrarySearchPath','-I'); tool.setDirective('OutputFlag','-out:'); tool.setDirective('Debug',''); tool.setFileExtension('Executable','.exe'); tool.setFileExtension('Shared Library','.dll'); tool.DerivedFileExtensions = horzcat(tool.DerivedFileExtensions,{ ... ['_' tc.Platform '.lib'],... ['_' tc.Platform '.exp']}); tool.setCommandPattern('|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|');
Предыдущий код:
Создает объект инструмента сборки для компоновщика
Значения присвоений к coder.make.BuildTool.DerivedFileExtensions
% ------------------------------ % Archiver % ------------------------------ tool = tc.getBuildTool('Archiver'); tool.setName('Intel C/C++ Archiver'); tool.setCommand('xilib'); tool.setPath(''); tool.setDirective('OutputFlag','-out:'); tool.setFileExtension('Static Library','.lib'); tool.setCommandPattern('|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|');
Предыдущий код:
Создает объект инструмента сборки для archiver.
% ------------------------------ % Builder % ------------------------------ tc.setBuilderApplication(tc.Platform);
Предыдущий код:
Дает значение coder.make.ToolchainInfo.Platform
в качестве аргумента для того, чтобы установить значение BuilderApplication
. Это устанавливает значения по умолчанию приложения разработчика на основе платформы. Например, когда Platform
является win64
, эта строка устанавливает удалить команду на 'del'
; команда отображения к 'echo'
, разделитель файлов к '\'
и включать директива к '!include'
.
% -------------------------------------------- % BUILD CONFIGURATIONS % -------------------------------------------- optimsOffOpts = {'/c /Od'}; optimsOnOpts = {'/c /O2'}; cCompilerOpts = '$(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL)'; cppCompilerOpts = '$(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL)'; linkerOpts = {'$(ldebug) $(conflags) $(LIBS_TOOLCHAIN)'}; sharedLinkerOpts = horzcat(linkerOpts,'-dll -def:$(DEF_FILE)'); archiverOpts = {'/nologo'}; % Get the debug flag per build tool debugFlag.CCompiler = '$(CDEBUG)'; debugFlag.CppCompiler = '$(CPPDEBUG)'; debugFlag.Linker = '$(LDDEBUG)'; debugFlag.Archiver = '$(ARDEBUG)'; cfg = tc.getBuildConfiguration('Faster Builds'); cfg.setOption('C Compiler',horzcat(cCompilerOpts,optimsOffOpts)); cfg.setOption('C++ Compiler',horzcat(cppCompilerOpts,optimsOffOpts)); cfg.setOption('Linker',linkerOpts); cfg.setOption('Shared Library Linker',sharedLinkerOpts); cfg.setOption('Archiver',archiverOpts); cfg = tc.getBuildConfiguration('Faster Runs'); cfg.setOption('C Compiler',horzcat(cCompilerOpts,optimsOnOpts)); cfg.setOption('C++ Compiler',horzcat(cppCompilerOpts,optimsOnOpts)); cfg.setOption('Linker',linkerOpts); cfg.setOption('Shared Library Linker',sharedLinkerOpts); cfg.setOption('Archiver',archiverOpts); cfg = tc.getBuildConfiguration('Debug'); cfg.setOption('C Compiler',horzcat(cCompilerOpts,optimsOffOpts,debugFlag.CCompiler)); cfg.setOption ... ('C++ Compiler',horzcat(cppCompilerOpts,optimsOffOpts,debugFlag.CppCompiler)); cfg.setOption('Linker',horzcat(linkerOpts,debugFlag.Linker)); cfg.setOption('Shared Library Linker',horzcat(sharedLinkerOpts,debugFlag.Linker)); cfg.setOption('Archiver',horzcat(archiverOpts,debugFlag.Archiver)); tc.setBuildConfigurationOption('all','Download',''); tc.setBuildConfigurationOption('all','Execute',''); tc.setBuildConfigurationOption('all','Make Tool','-f $(MAKEFILE)');
Предыдущий код:
Создает каждый объект конфигурации сборки.
Устанавливает значение каждой опции для данного объекта конфигурации сборки.