corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Использование дескриптора набора средств C/C++ – учебный курс для среды IDE NetBeans 6.9

Содержание

Содержимое этой страницы относится к среде IDE NetBeans 6.9

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

Программное обеспечение Требуемая версия
Среда IDE NetBeans (включая поддержку C/C++) версия 6.9
Комплект для разработчика на языке Java (JDK) версия 6
Компиляторы C и C++, make, gdb Наборы средств C/C++, протестированные со средой IDE NetBeans

Ознакомьтесь с разделами Указания по установке среды IDE NetBeans 6.9 и Настройка среды IDE NetBeans для C/C++/Фортрана
для получения сведений о загрузке и установке требуемого программного обеспечения.

Введение

Требуется изменить флажки компилятора, которые используются в среде IDE NetBeans по умолчанию для компиляции файлов C/C++? Необходимо добавить компилятор, не поддерживаемый средой IDE NetBeans? Прочитав данную статью, вы сможете решить эти задачи! В данном учебном курсе показано, как изменять существующие наборы средств или создать особый набор средств в среде IDE NetBeans 6.9.

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

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

Дескриптор набора средств – это файл xml, расположенный в модуле ${NB}/cnd/modules/org-netbeans-modules-cnd-toolchain.jar, который можно найти в папке org/netbeans/modules/cnd/toolchain/resources/toolchaindefinition/. Исходные файлы XML дескриптора средств NetBeans не следует изменять. В данной статье описывается способ создания изменяемых копий.

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

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

  1. Завершите работу среды IDE, если она запущена.
  2. К записи netbeans_default_options в файле ${NB}/etc/netbeans.conf добавьте следующий флаг:
    -J-Dcnd.toolchain.personality.create_shadow=true
  3. Запустите среду IDE, выберите "Сервис" > "Параметры", затем в верхней панели окна параметров выберите "C/C++". В среде IDE будут созданы "теневые" версии дескрипторов наборов средств в каталоге пользователя.
    ${userdir}/config/CND/ToolChain

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

    Cygwin.xml		GNU_solaris.xml		SunStudio.xml		SunStudio_12.1.xml	SunStudio_Linux.xml
    Cygwin_4.x.xml		Interix.xml		SunStudioExpress.xml	SunStudio_12.xml
    GNU.xml			MinGW.xml		SunStudio_10.xml	SunStudio_8.xml
    GNU_mac.xml		MinGW_TDM.xml		SunStudio_11.xml	SunStudio_9.xml
    

  4. Можно изменить дескриптор используемой инструментальной цепочки, и после перезапуска в среде IDE будет использоваться этот дескриптор. Для получения дополнительных сведений о тегах, используемых в данных файлах XML дескриптора, обратитесь к разделу Дополнительные сведения об файле XML набора средств.

Перед следующим запуском среды IDE удалите флаг -J-Dcnd.toolchain.personality.create_shadow=true. "Теневые" дескрипторы в среде IDE создаются только один раз.

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

Можно создать собственный набор средств. В следующем примере описывается создание нового модуля NetBeans, содержащего новый набор средств. Для получения общих сведений о создании модулей NetBeans см. раздел Руководство по началу работы с подключаемыми модулями в среде NetBeans.

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

    <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>
        
  7. Откройте файл Bundle.properties и добавьте следующую строку:
    CND/ToolChains/GNU_tuned=My GNU Tuned Tool Collection
  8. Создайте подпакет toolchain, щелкнув правой кнопкой мыши пакет mytoolchain в узле "Пакеты исходных файлов" и выбрав "Создать" > "Пакет Java".
  9. Создайте новый файл в пакете toolchain, щелкнув правой кнопкой мыши подпакет toolchain и выбрав "Создать" > "Пустой файл". Назовите файл GNU_tuned_flavor.xml и нажмите кнопку Next ("Далее").
  10. Скопируйте следующий текст в GNU_tuned_flavor.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <toolchaindefinition xmlns="http://www.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>
    
  11. Создайте новый файл в пакете toolchain, щелкнув правой кнопкой мыши подпакет toolchain и выбрав New ("Создать") > Empty File("Пустой файл"). Назовите файл GNU_tuned_cpp.xml и нажмите кнопку Next ("Далее").
  12. Скопируйте следующий текст в GNU_tuned_cpp.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <toolchaindefinition xmlns="http://www.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 по умолчанию.
    Дерево проекта выглядит следующим образом:


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


  16. Создайте новый пример проекта C/C++ Welcome путем выбора "Файл" > "Создать проект" > "Примеры" > "C/C++" > "Welcome".
  17. Щелкните правой кнопкой узел проекта и выберите команду "Свойства". В диалоговом окне "Свойства проекта" выберите узел "Сборка", укажите набор средств GNU_tuned, затем нажмите кнопку "OK" .
  18. Выполните сборку проекта. Убедитесь, что для компилятора установлены флаги -g3 -gdwarf-2
    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
  19. В диалоговом окне "Свойства проекта" выберите набор средств GNU и нажмите кнопку "ОК".
  20. Выполните повторную сборку проекта и сравните строку компиляции со строкой в окне вывода:
    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 в дереве исходных кодов среды IDE NetBeans.

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

Теги Атрибуты Описание
toolchain Имя набора средств
name Имя набора средств
display Отображаемое имя набора средств
family Имя группы набора средств
platforms Поддерживаемые платформы
stringvalue Перечень поддерживаемых платформ, разделенных запятой
Допустимые значения:
  • linux
  • unix
  • sun_intel
  • sun_sparc
  • windows
  • mac
  • none
makefile_writer Пользовательский файл makefile
class Имя класса для пользовательского создателя файла 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 Описание базового каталога для компиляторов
Данный тег может содержать следующие теги:
regestry Ключ реестра Windows для средства. Обратите внимание на то, что тег XML пишется как "regestry", несмотря на орфографическую ошибку.
pattern Регулярное выражение, с помощью которого в среде IDE NetBeans выполняется поиск компилятора в каталоге.
suffix Папка с исполняемыми файлами
path_patern Регулярное выражение, с помощью которого в среде IDE NetBeans выполняется поиск компилятора при поиске по путям. Обратите внимание на то, что тег XML пишется как "path_patern", несмотря на орфографическую ошибку.
command_folders Контейнер для тегов command_folder.
В одном теге command_folders содержится один или несколько тегов commander_folder.
command_folder Описывает каталог, где находятся UNIX-подобные команды.
Требуется только для компилятора MinGW на ОС Windows. Тег command_folder может содержать следующие теги:
regestry Ключ реестра Windows для команд. Обратите внимание на то, что тег XML пишется как "regestry", несмотря на орфографическую ошибку.
pattern Регулярное выражение, с помощью которого в среде IDE NetBeans выполняется поиск папки с командами в каталоге.
suffix Папка с исполняемыми файлами
path_patern Регулярное выражение, с помощью которого в среде IDE NetBeans выполняется поиск команд. Обратите внимание на то, что тег XML пишется как "path_patern", несмотря на орфографическую ошибку.
scanner Имя службы синтаксического анализатора, см. раздел Создание обработчика ошибок пользовательского компилятора.
id Имя службы синтаксического анализатора

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

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

Теги Описание Пример для компилятора GNU
c,cpp Набор флагов компилятора находится в следующих подузлах:
recognizer Регулярное выражение, с помощью которого выполняется поиск компилятора. Для GNU в среде cygwin на ОС Windows
.*[\\/].*cygwin.*[\\/]bin[\\/]?$
compiler Имя компилятора (имя исполняемого файла) gcc or g++
version флаг версии --version
system_include_paths Флаги для получения путей к системным файлам include. -x c -E -v
system_macros Флаги для получения системных макросов. -x c -E -dM
user_include Флаг для добавления пути к пользовательскому файлу include. -I
user_macro Флаг для добавления пользовательского макроса. -D
development_mode Группы флагов для различных режимов разработки.
warning_level Группы флагов для различных уровней предупреждения.
architecture Группы флагов для различных архитектур.
strip Флаг для удаления информации об отладке. -s
dependency_generation Флаги для создания зависимостей. -MMD -MP -MF $@.d
precompiled_header Флаги для предварительно скомпилированного заголовка. -o $@
multithreading Группы флагов для поддержки многопоточности.
standard Группы флагов для различных языковых стандартов.
language_extension Группы флагов для различных языковых расширений.

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

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

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

  • расширьте абстрактный класс org.netbeans.modules.cnd.api.compilers.CompilerProvider,
  • определите класс как службу и поместите ее перед поставщиком по умолчанию:
    @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.
  • Определите класс как службу:
    @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
              }
          }
  • Соедините сканер ошибок и описание набора средств с помощью идентификатора:
    </scanner id="MyParser">
    ...
      </scanner>