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

Шаги, включенные в письменной форме файл определения набора инструментальных средств

Этот пример показывает, как создать файл определения набора инструментальных средств и объясняет каждый из включенных шагов. Пример основан на файле определения, используемом в Добавлении Пользовательского Набора инструментальных средств. Для получения дополнительной информации о рабочем процессе, смотрите Типичный Рабочий процесс.

Запишите функцию, которая создает объект ToolchainInfo

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

% ------------------------------
% 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++

% ------------------------------
% 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

% ------------------------------
% 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)');

Предыдущий код:

  • Создает каждый объект конфигурации сборки.

  • Устанавливает значение каждой опции для данного объекта конфигурации сборки.