// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Использование дескрипторов наборов средств C/C++ - Практическое руководство по IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Использование дескрипторов наборов средств C/C++ - Практическое руководство по IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Использование дескрипторов наборов средств C/C++ - Практическое руководство по IDE NetBeans

_Составитель: link:mailto:alexander.simon@oracle.com[+_Александр Саймон (Alexander Simon)_+]
Март 2014 г._ [Номер версии: V8.0-1]


image::images/netbeans-stamp.png[title="Содержимое этой страницы применимо к IDE NetBeans 8.0"]


*Для работы с этим учебным курсом требуется программное обеспечение, указанное ниже.*

|===
|Программное обеспечение |Требуемая версия 

|IDE NetBeans (включая поддержку C/C++) |link:https://netbeans.org/downloads/index.html[+Версия 8.0+] 

|Комплект для разработчика на языке Java (JDK) |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Версия 7 или 8+] 
|===


Дополнительные сведения о загрузке и установке необходимого программного обеспечения см. в разделах link:../../../community/releases/80/install.html[+Инструкции по установке IDE NetBeans+] и link:../../../community/releases/80/cpp-setup-instructions.html[+Настройка IDE NetBeans для C/C++/Fortran+].


== Введение

Это практическое руководство содержит инструкции по изменению существующих наборов средств и созданию собственной версии набора средств на основе существующего в IDE NetBeans 8.0.

Показанный пример относится к набору средств GNU для Oracle Solaris и Linux, но общие принципы применимы также для Windows и Mac. Используя информацию в этом руководстве, вы научитесь делать следующее:

* Менять флаги компиляторов, которые IDE NetBeans по умолчанию использует для компиляции файлов C/C++
* Добавлять компиляторы, которые не поддерживаются в среде IDE


== Наборы средств

В набор средств входят набор компиляторов, утилита make и отладчик. Набор средств определяется в IDE с помощью _дескриптора наборов инструментов_. При каждой компиляции, создании или отладке кода IDE NetBeans запускает исполняемый файл, описанный в дескрипторе наборов средств для набора средств, заданного в настройках проекта. Функции 'Помощь при работе с кодом' используют пути include и макросы из дескриптора наборов средств.

Дескриптор набора средств - это XML-файл, расположенный в модуле  ``_IDE_HOME_/cnd/modules/org-netbeans-modules-cnd-toolchain.jar`` , который находится в папке  ``org/netbeans/modules/cnd/toolchain/resources/toolchaindefinition/`` . Вносить изменения в исходные XML-файлы дескриптора средств IDE не рекомендуется.

Эта статья содержит инструкции по созданию дубликатов дескрипторов средств в собственном каталоге пользователя NetBeans, доступном для редактирования. IDE будет использовать данные дескрипторов наборов средств, расположенных в вашем каталоге пользователя, вместо исходных версий.


== Наборы инструментов, предоставленные сообществом

Некоторые подключаемые модули для наборов средств разработаны участниками сообщества NetBeans:

* link:http://plugins.netbeans.org/plugin/36176/cuda-plugin[+Cuda+]
* link:http://plugins.netbeans.org/plugin/27033/msp430-toolchain[+TI msp430 microcontroller toolchain+]
* link:http://plugins.netbeans.org/plugin/42519/[+Visual Studio+]

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

Пользователям Windows также будет интересна статья одного из участников сообщества NetBeans: link:http://minghuasweblog.wordpress.com/2012/09/27/netbeans-setup-and-gnu-cross-toolchain-configuration-for-arm-developmen/[+Настройка NetBeans и общие настройки наборов средств GNU для разработки ARM+].


== Изменение дескрипторов наборов средств

Изменение дескрипторов наборов средств представляет собой непростую задачу, поскольку в IDE NetBeans отсутствует графический пользовательский интерфейс для изменения дескрипторов. В этом разделе описывается создание 'теневых' копий дескрипторов наборов инструментов, которые можно изменить, если требуется, чтобы в среде IDE использовались другие средства.

1. Завершите работу среды IDE, если она запущена.
2. Отредактируйте файл  ``_IDE-HOME_/etc/netbeans.conf`` , где  ``_IDE-HOME_``  - каталог установки NetBeans.
3. Добавьте следующий флаг в запись  ``netbeans_default_options`` :

[source,java]
----

-J-Dcnd.toolchain.personality.create_shadow=true
----
4. Запустите среду IDE, выберите "Сервис" > "Параметры", затем в верхней панели окна параметров выберите "C/C++". 

IDE создает 'теневые' версии дескрипторов наборов средств в каталоге пользователя NetBeans:

_userdir_

[source,java]
----

/config/CND/ToolChain
----

Местоположение каталога пользователя NetBeans зависит от операционной системы. Возможные варианты местоположения каталога  ``_userdir_/config/CND/ToolChain`` :

* ﻿Windows:  ``C:\Documents and Settings\_username_\Application Data\NetBeans\_version_\config\CND\ToolChain`` 
* Mac:  ``/Users/_username_/Library/Application Support/NetBeans/_version_/config/CND/ToolChain`` 
* Linux и Solaris:  ``/home/_username_/.netbeans/_version_/config/CND/ToolChain`` 

Список дескрипторов должен быть аналогичен следующему:


[source,java]
----

CLang.xml                             SunStudio.xml
CLang_mac.xml                         SunStudio_10.xml
CLang_solaris.xml                     SunStudio_11.xml
Cygwin.xml                            SunStudio_12.1_solaris-sparc.xml
Cygwin_4.x.xml                        SunStudio_12.1_solaris-x86_linux.xml
GNU.xml                               SunStudio_12.2_linuxCompatGNU.xml
GNU_mac.xml                           SunStudio_12.2_solaris-sparc.xml
GNU_solaris.xml                       SunStudio_12.2_solaris-x86_linux.xml
Intel.xml                             SunStudio_12.3_linuxCompatGNU.xml
Interix.xml                           SunStudio_12.3_solaris-sparc.xml
MinGW.xml                             SunStudio_12.3_solaris-x86_linux.xml
MinGW_TDM.xml                         SunStudio_12.xml
OSS_linuxCompatGNU.xml                SunStudio_8.xml
OSS_solaris-sparc.xml                 SunStudio_9.xml
OSS_solaris-x86_linux.xml             WinAVR.xml
OracleSolarisStudio.xml

----

Вы можете изменить дескриптор для используемого набора средств. Например, если вы используете средства GNU в ОС Solaris, необходимо отредактировать файл  ``GNU_solaris.xml`` ; если вы используете MinGW в ОС Windows, необходимо отредактировать файл  ``MinGW.xml`` .

Сведения о тегах, используемых в XML-файлах дескриптора, см. в разделе <<details,Подробно об XML-файлах набора средств>>. Значения тегов можно изменить. В этом случае соответствующим образом изменится функционирование средств в IDE.

Дескрипторы, находящиеся в этом каталоге, имеют более высокий приоритет по сравнению с официальными версиями в каталоге _IDE-HOME_. Если вы не хотите, чтобы в среде IDE использовались некоторые дескрипторы средств, удалите их из своего каталога пользователя.

5. Удалите флаг  ``-J-Dcnd.toolchain.personality.create_shadow=true``  из файла  ``_IDE-HOME_/etc/netbeans.conf`` , чтобы в среде IDE больше не создавались теневые копии дескрипторов.
6. Перед использованием измененного дескриптора средств необходимо перезапустить IDE.


== [[Создание пользовательского набора средств]] 

Этот раздел содержит инструкции по созданию набора средств на основе набора средств GNU. В новом наборе средств будут изменены флаги компилятора для отладки. В примере показаны этапы создания нового модуля NetBeans с новым набором средств. Это модуль позволяет совместно использовать набор средств, а также использовать набор средств в других экземплярах IDE.

Для получения общих сведений о создании модулей NetBeans см. раздел link:http://platform.netbeans.org/tutorials/nbm-google.html[+Руководство по началу работы с подключаемыми модулями в среде NetBeans+].


*Чтобы создать собственный набор средств:*

1. Убедитесь, что в состав установленного экземпляра NetBeans входит модуль NetBeans Plugin Development.

Выберите Сервис > Подключаемые модули и перейдите на вкладку 'Установленные'. Если модуль разработки подключаемых модулей NetBeans не установлен, перейдите на вкладку "Доступные подключаемые модули" и установите модуль. Его можно быстро найти путем ввода текста "plugin" в окне поиска.
2. Создайте новый модуль NetBeans путем выбора "Файл" > "Создать проект". На странице "Выбор проекта" в мастере создания нового проекта выберите категорию "Модули NetBeans" и в первом шаге мастера укажите проект "Модуль". Нажмите кнопку "Далее".
3. На странице "Имя и местоположение" введите имя проекта, например,  ``mytoolchain`` , а в остальных полях оставьте значения по умолчанию. Нажмите кнопку "Далее".
4. На странице 'Основные настройки модуля' в поле 'Основа имени кода ' введите  ``org.myhome.mytoolchain`` . Это имя определяет уникальный строковый ресурс для идентификации создаваемого модуля. Основа имени кода также используется в качестве основного пакета модуля.
5. Не устанавливайте флажок 'Создать пакет OSGi', так как в этом примере будет использоваться стандартная система модулей NetBeans, а не OSGi.
6. Нажмите кнопку "Готово". IDE создает новый проект с именем mytoolchain.
7. На вкладке 'Проекты' щелкните узел проекта mytoolchain правой кнопкой мыши и выберите Создать > Другое.
8. В мастере создания файлов выберите категорию 'Разработка модулей' и тип файла 'Слой XML', затем нажмите 'Далее' и 'Готово'. 

IDE создает файл  ``layer.xml``  в структуре узла 'Исходные пакеты' внутри основного пакета  ``org.myhome.mytoolchain``  и открывает файл  ``layer.xml``  в редакторе.
9. Если файл содержит тег  ``<filesystem/>`` , замените его парными тегами  ``filesystem`` : ``<filesystem>`` 

[source,xml]
----


 ``</filesystem>`` 
----
10. Скопируйте и вставьте следующий текст в файл  ``layer.xml``  внутри тега  ``filesystem`` :

[source,xml]
----

<folder name="CND">
        <folder name="Tool">
            <file name="GNU_tuned_flavor" url="toolchain/GNU_tuned_flavor.xml">
                <attr name="extends" stringvalue="GNU_flavor"/>
            </file>
            <file name="GNU_tuned_cpp" url="toolchain/GNU_tuned_cpp.xml">
                <attr name="extends" stringvalue="GNU_cpp"/>
            </file>
        </folder>
        <folder name="ToolChains">
            <folder name="GNU_tuned">
                <attr name="position" intvalue="5000"/>
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.myhome.mytoolchain.Bundle"/>
                <file name="flavor.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_tuned_flavor"/>
                </file>
                <file name="c.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_c"/>
                </file>
                <file name="cpp.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_tuned_cpp"/>
                </file>
                <file name="fortran.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_fortran"/>
                </file>
                <file name="assembler.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_assembler"/>
                </file>
                <file name="scanner.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_scanner"/>
                </file>
                <file name="linker.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_linker"/>
                </file>
                <file name="make.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_make"/>
                </file>
                <file name="debugger.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_debugger"/>
                </file>
                <file name="qmake.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_qmake"/>
                </file>
                <file name="cmake.shadow">
                    <attr name="originalFile" stringvalue="CND/Tool/GNU_cmake"/>
                </file>
            </folder>
        </folder>
    </folder>
    
----
11. Откройте файл  ``Bundle.properties``  и добавьте следующую строку:
 ``CND/ToolChains/GNU_tuned=My GNU Tuned Tool Collection`` 
12. Создайте подпакет  ``toolchain`` . Для этого щелкните правой кнопкой мыши пакет  ``org.myhome.mytoolchain``  в структуре узла 'Исходные пакеты' и выберите Создать > Пакет Java. Замените заданное по умолчанию имя пакета  ``newpackage``  на  ``toolchain``  и нажмите 'Готово'. IDE создает подпакет  ``org.myhome.mytoolchain.toolchain`` .
13. Создайте новый файл. Щелкните правой кнопкой мыши подпакет  ``org.myhome.mytoolchain.toolchain``  и выберите Создать > Пустой файл. Назовите файл  ``GNU_tuned_flavor.xml``  и нажмите 'Готово'.

Если в меню отсутствует пункт 'Пустой файл', выберите 'Другие'. Затем в мастере создания файлов выберите категорию 'Другие', тип файла 'Пустой файл' и нажмите 'Далее'.

Этот файл является дескриптором для нового набора средств.

14. Скопируйте следующий текст в  ``GNU_tuned_flavor.xml`` :

[source,xml]
----

<?xml version="1.0" encoding="UTF-8"?>
<toolchaindefinition xmlns="https://netbeans.org/ns/cnd-toolchain-definition/1">
    <toolchain name="GNU_tuned_flavor" display="GNU_tuned" family="GNU" qmakespec="${os}-g++"/>
    <platforms stringvalue="linux,sun_intel,sun_sparc"/>
</toolchaindefinition>

----
15. Создайте еще один файл. Щелкните правой кнопкой мыши подпакет  ``org.myhome.mytoolchain.toolchain``  и выберите Создать > Пустой файл. Назовите файл  ``GNU_tuned_cpp.xml``  и нажмите кнопку Next ("Далее").
16. Скопируйте следующий текст в  ``GNU_tuned_cpp.xml`` :

[source,xml]
----

<?xml version="1.0" encoding="UTF-8"?>
<toolchaindefinition xmlns="https://netbeans.org/ns/cnd-toolchain-definition/1">
    <cpp>
        <compiler name="g++"/>
        <development_mode>
            <fast_build flags=""/>
            <debug flags="-g3 -gdwarf-2" default="true"/>
            <performance_debug flags="-g -O"/>
            <test_coverage flags="-g"/>
            <diagnosable_release flags="-g -O2"/>
            <release flags="-O2"/>
            <performance_release flags="-O3"/>
        </development_mode>
    </cpp>
</toolchaindefinition>

----

Обратите внимание на установленные флаги отладки -g3 и -gdwarf-2, которые отличаются от флагов, установленных в описании набора средств GNU по умолчанию.

Дерево проекта должно выглядеть следующим образом:

image::images/project.png[title="Дерево проектов"]

Папки 'Тест модуля' могут отсутствовать.

17. В окне 'Проекты' щелкните правой кнопкой мыши узел проекта  ``mytoolchain``  и выберите 'Выполнить'. В новом экземпляре среды IDE будет создан и установлен модуль, представляющий собой целевую платформу по умолчанию для модулей. Откроется целевая платформа для тестирования нового модуля.
18. В выполняемом модуле выберите "Сервис" > "Параметры", затем в верхней панели окна параметров выберите "C/C++" и перейдите на вкладку "Средства сборки".
19. Если новый набор средств (GNU_tuned) не отображается, нажмите кнопку "Восстановить параметры по умолчанию". В запросе на повторный поиск в среде нажмите кнопку "Да" для продолжения работы.

В среде IDE появится новый набор средств:

image::images/options.png[title="Панель 'Параметры'"]
20. Создайте новый пример проекта C/C++  ``Welcome``  путем выбора "Файл" > "Создать проект" > "Примеры" > "C/C++" > "Welcome".
21. Щелкните правой кнопкой узел проекта и выберите команду "Свойства". В диалоговом окне "Свойства проекта" выберите узел "Сборка", укажите набор средств GNU_tuned, затем нажмите кнопку "OK" .
22. Выполните сборку проекта. Убедитесь, что для компилятора установлены флаги  ``-g3 -gdwarf-2`` 

[source,java]
----

g++ -c -g3 -gdwarf-2 -MMD -MP -MF build/Debug/GNU_tuned-Solaris-x86/welcome.o.d -o build/Debug/GNU_tuned-Solaris-x86/welcome.o welcome.cc
----
23. В диалоговом окне "Свойства проекта" выберите набор средств GNU и нажмите кнопку "ОК".
24. Выполните повторную сборку проекта и сравните строку компиляции со строкой в окне вывода:

[source,java]
----

g++ -c -g -MMD -MP -MF build/Debug/GNU-Solaris-x86/welcome.o.d -o build/Debug/GNU-Solaris-x86/welcome.o welcome.cc
----

Как видите, набор средств GNU_tuned содержит другие флаги компилятора для отладки, режима разработки в компиляторе GNU.

Для использования нового модуля для набора средств GNU_tuned в стандартной среде можно создать двоичный файл (файл .nbm) и добавить его в качестве подключаемого модуля:

1. Щелкните правой кнопкой мыши проект модуля mytoolchain и выберите "Создать NBM". В подкаталоге сборки проекта будет создан файл .nbm, который также отображается на вкладке файлов.
2. Выберите "Сервис" > "Подключаемые модули", затем в диалоговом окне "Подключаемые модули" перейдите на вкладку "Загрузки".
3. Нажмите кнопку "Добавить подключаемые модули", перейдите к каталогу сборки, выберите модуль файла .nbm и нажмите кнопку "Открыть". Подключаемый модуль будет добавлен в список на вкладке "Загрузки".
4. Для выбора модуля установите флажок на вкладке "Загрузки", затем нажмите кнопку "Установить". Откроется мастер установки подключаемых модулей NetBeans.
5. Нажимайте кнопку "Далее" для перехода к последующим действиям мастера вплоть до последнего действия.
6. Перезапустите среду IDE, выберите "Сервис" > "Параметры", затем в верхней панели окна параметров нажмите "С/С++" и перейдите на вкладку "Средства сборки".
7. Если новый набор средств (GNU_tuned) не отображается, нажмите 'Восстановить параметры по умолчанию'. В запросе на повторный поиск в среде нажмите кнопку "Да" для продолжения работы.


=== Дополнительные сведения о файле XML набора средств

В этом разделе описывается большая часть наиболее важных тегов в файле XML набора средств.

Схему всех поддерживаемых тегов и атрибутов xml-файлов набора средств можно посмотреть в файле  ``toolchaindefinition.xsd``  в link:http://hg.netbeans.org/cnd-main[+дереве исходного кода IDE NetBeans+].


==== Теги определения набора средств

|===
|Теги |Атрибуты |Описание 

|инструментальная цепочка |Имя набора средств 

|"name" – имя |Имя набора средств 

|отображение |Отображаемое имя набора средств 

|семейство |Имя группы набора средств 

|платформы |Поддерживаемые платформы 

|stringvalue |Перечень поддерживаемых платформ, разделенных запятой
Допустимые значения:

* Linux
* unix
* sun_intel
* sun_sparc
* Windows
* mac
* нет
 

|makefile_writer |Пользовательский файл makefile 

|класс |Имя класса для пользовательского создателя файла makefile Класс реализует
org.netbeans.modules.cnd.makeproject.spi.configurations.MakefileWriter. 

|drive_letter_prefix |Специальный префикс для имен 

|stringvalue |"/" для unix
"/cygdrive/" для cygwin на ОС Windows 

|base_folders |Контейнер для тегов base_folder. 
В теге base_folders содержится один или несколько тегов. 

|base_folder |Описание базового каталога для компиляторов
Данный тег может содержать следующие теги: 

|реестр |Ключ реестра Windows для средства. Обратите внимание на то, что тег XML пишется как "regestry", несмотря на орфографическую ошибку. 

|шаблон |Регулярное выражение, позволяющее IDE NetBeans найти компилятор в реестре 

|суффикс |Папка с исполняемыми файлами 

|path_patern |Регулярное выражение, позволяющее IDE NetBeans найти компилятор путем сканирования путей. Обратите внимание на то, что тег XML пишется как "path_patern", несмотря на орфографическую ошибку. 

|command_folders |Контейнер для тегов command_folder. 
В одном теге command_folders содержится один или несколько тегов commander_folder. 

|command_folder |Описывает каталог, где находятся UNIX-подобные команды.
Требуется только для компилятора MinGW на ОС Windows. Тег command_folder может содержать следующие теги: 

|реестр |Ключ реестра Windows для команд. Обратите внимание на то, что тег XML пишется как "regestry", несмотря на орфографическую ошибку. 

|шаблон |Регулярное выражение, позволяющее IDE NetBeans найти папку команд в реестре 

|суффикс |Папка с исполняемыми файлами 

|path_patern |Регулярное выражение, позволяющее IDE NetBeans найти команды. Обратите внимание на то, что тег XML пишется как "path_patern", несмотря на орфографическую ошибку. 

|сканер |Имя службы синтаксического анализатора, см. раздел <<errorhandler,Создание обработчика ошибок пользовательского компилятора>>. 

|идентификатор |Имя службы синтаксического анализатора 
|===


==== Флаги компилятора

В данной таблице описаны теги, используемые в описании компиляторов и в определении флагов компиляторов для интсорументальной цепочки.

|===
|Теги |Описание |Пример для компилятора GNU 

|c,cpp |Набор флагов компилятора находится в следующих подузлах: 

|средство распознавания |Регулярное выражение, позволяющее IDE найти компилятор |Для GNU в среде cygwin на ОС Windows
.*[\\/].*cygwin.*[\\/]bin[\\/]?$ 

|компилятор |Имя компилятора (имя исполняемого файла) |gcc или g++ 

|версия |флаг версии |--версия 

|system_include_paths |Флаги для получения путей к системным файлам include. |-x c -E -v 

|system_macros |Флаги для получения системных макросов. |-x c -E -dM 

|user_include |Флаг для добавления пути к пользовательскому файлу include. |-I 

|user_file |Флаг для добавления содержимого _файла_ перед содержимым других файлов |-include _файл_ 

|user_macro |Флаг для добавления пользовательского макроса. |-D 

|development_mode |Группы флагов для различных режимов разработки. 

|warning_level |Группы флагов для различных уровней предупреждения. 

|архитектура |Группы флагов для различных архитектур. 

|удалить |Флаг для удаления информации об отладке. |-s 

|c_standard |Определяет флаги для стандартных выражений C. Используется с тегами c89, c99 и c11. |c89 flags="-std=c89"
c99 flags="-std=c99"
c11 flags="-std=c11" 

|cpp_standard |Определяет флаги для стандартных выражений C++. Используется с тегами cpp98 и cpp11. |cpp98 flags="-std=c++98"
cpp11 flags="-std=c++11"
cpp11 flags="-std=gnu++0x" 

|output_object_file |Флаги для указания файла объектов |-o _(после -o необходим пробел)_ 

|dependency_generation |Флаги для создания зависимостей. |-MMD -MP -MF $@.d 

|precompiled_header |Флаги для предварительно скомпилированного заголовка. |-o $@ 

|important_flags |Регулярное выражение, которое определяет флаги компилятора, изменяющие систему по умолчанию, включая пути и предопределенные макросы для помощи при работе с кодом |-O1|-O2|-O3|-O4|-O5|-Ofast|-Og|-Os|-ansi|-fPIC|-fPIE|-fasynchronous-unwind-tables|-fbuilding-libgcc|-fexceptions|-ffast-math|-ffinite-math-only|-ffreestanding|-fgnu-tm|-fhandle-exceptions|-fleading-underscore|-fno-exceptions|-fno-rtti|-fnon-call-exceptions|-fnon-call-exceptions|-fopenmp|-fpic|-fpie|-fsanitize=address|-fshort-double|-fshort-wchar|-fsignaling-nans|-fstack-protector(\W|$|-)|-fstack-protector-all|-funsigned-char|-funwind-tables|-g(\W|$|-)|-ggdb|-gsplit-dwarf|-gtoggle|-m128bit-long-double|-m3dnow|-m64|-mabm|-madx|-maes|-march=.*|-mavx|-mavx2|-mbmi|-mbmi2|-mf16c|-mfma(\W|$|-)|-mfma4|-mfsgsbase|-mlong-double-64|-mlwp|-mlzcnt|-mpclmul|-mpopcnt|-mprfchw|-mrdrnd|-mrdseed|-mrtm|-msse3|-msse4(\W|$|-)|-msse4.1|-msse4.2|-msse4a|-msse5|-mssse3|-mtbm|-mtune=.*|-mx32|-mxop|-mxsave|-mxsaveopt|-pthreads|-std=.*|-xc($|\+\+$) 

|многопоточность |Группы флагов для поддержки многопоточности. |Только для наборов средств Oracle Solaris Studio. Не используется в наборах средств на основе GNU. 

|стандартный |Группы флагов для различных языковых стандартов. |Только для наборов средств Oracle Solaris Studio. Не используется в наборах средств на основе GNU. 

|language_extension |Группы флагов для различных языковых расширений. |Только для наборов средств Oracle Solaris Studio. Не используется в наборах средств на основе GNU. 
|===


== Создание поставщика пользовательского компилятора

В IDE NetBeans имеется поставщик компиляторов по умолчанию:
org.netbeans.modules.cnd.toolchain.compilers.MakeProjectCompilerProvider 
Этот поставщик работает для большей части инструментальных цепочек, но пользователи могут создавать собственных поставщиков.

*Для создания собственного поставщика компилятора выполните следующие действия:*

* расширьте абстрактный класс org.netbeans.modules.cnd.api.compilers.CompilerProvider,
* определите класс как службу и поместите ее перед поставщиком по умолчанию:

[source,java]
----

@org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.spi.toolchain.CompilerProvider.class,
position=500)
public class CustomCompilerProvider extends CompilerProvider {
...
}

----
Атрибут position=500 отвечает за вызов пользовательского поставщика перед поставщиком по умолчанию. Пользовательский поставщик должен возвращать ссылку на объект "Tool", не равную NULL, в методе createCompiler() для перезаписываемого средства.


== Создание обработчика ошибок для пользовательского компилятора

В IDE NetBeans имеется два обработчика ошибок компиляторов, заданные по умолчанию.

* для компилятора GNU,
* для компилятора Sun Studio.

Обработчик ошибок компилятора GNU совместим с любыми компиляторами GNU, однако можно создать собственный обработчик ошибок компилятора.

*Для создания собственного обработчика ошибок выполните следующие действия:*

* Расширьте абстрактный класс org.netbeans.modules.cnd.spi.toolchain.CompilerProvider.
* Определите класс как службу:

[source,java]
----

@org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.spi.toolchain.CompilerProvider.class)
      public class CustomCompilerProvider extends ErrorParserProvider {
          ...
          @Override
          public String getID() {
      	return "MyParser";  // NOI18N
          }
      }
----
* Соедините сканер ошибок и описание набора средств с помощью идентификатора:

[source,xml]
----

</scanner id="MyParser">
...
  </scanner>
----


== См. также

Дополнительные статьи о разработке с помощью C/C++/Fortran в IDE NetBeans см. в разделе link:https://netbeans.org/kb/trails/cnd.html[+Учебные карты C/C+++].

link:mailto:users@cnd.netbeans.org?subject=Feedback:Using%20the%20C/C++%20Tool%20Collection%20Descriptors%20-%20NetBeans%20IDE%208.0%20Tutorial[+Отправить отзыв по этому учебному курсу+]


