Для работы с этим учебным курсом требуется программное обеспечение, указанное ниже.
Ознакомьтесь с разделами Указания по установке среды 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.
- Завершите работу среды IDE, если она запущена.
- К записи netbeans_default_options в файле ${NB}/etc/netbeans.conf добавьте следующий флаг:
-J-Dcnd.toolchain.personality.create_shadow=true
-
Запустите среду 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
- Можно изменить дескриптор используемой инструментальной цепочки, и после перезапуска в среде IDE будет использоваться этот дескриптор. Для получения дополнительных сведений о тегах, используемых в данных файлах XML дескриптора, обратитесь к разделу Дополнительные сведения об файле XML набора средств.
Перед следующим запуском среды IDE удалите флаг -J-Dcnd.toolchain.personality.create_shadow=true. "Теневые" дескрипторы в среде IDE создаются только один раз.
Можно создать собственный набор средств. В следующем примере описывается создание нового модуля NetBeans, содержащего новый набор средств. Для получения общих сведений о создании модулей NetBeans см. раздел Руководство по началу работы с подключаемыми модулями в среде NetBeans.
- Убедитесь в том, что в пакет установки NetBeans входит модуль разработки подключаемых модулей NetBeans. Для этого перейдите по пути "Сервис" > "Подключаемые модули" и выберите вкладку "Установлено". Если модуль разработки подключаемых модулей NetBeans не установлен, перейдите на вкладку "Доступные подключаемые модули" и установите модуль. Его можно быстро найти путем ввода текста "plugin" в окне поиска.
- Создайте новый модуль NetBeans путем выбора "Файл" > "Создать проект". На странице "Выбор проекта" в мастере создания нового проекта выберите категорию "Модули NetBeans" и в первом шаге мастера укажите проект "Модуль". Нажмите кнопку "Далее".
- На странице "Имя и местоположение" введите имя проекта, например, mytoolchain, а в остальных полях оставьте значения по умолчанию. Нажмите кнопку "Далее".
- На странице "Основные настройки модуля" введите основу кодового имени, например, org.myhome.mytoolchain, и установите флажок "Создать слой XML". Нажмите кнопку "Готово". В среде IDE будет создан новый проект.
- В окне "Проекты" в узле "Пакеты исходных файлов" выберите файл layer.xml. Дважды щелкните файл layer.xml для его открытия в редакторе.
- Скопируйте и вставьте в тег 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>
- Откройте файл Bundle.properties и добавьте следующую строку:
CND/ToolChains/GNU_tuned=My GNU Tuned Tool Collection
- Создайте подпакет toolchain, щелкнув правой кнопкой мыши пакет mytoolchain в узле "Пакеты исходных файлов" и выбрав "Создать" > "Пакет Java".
- Создайте новый файл в пакете toolchain, щелкнув правой кнопкой мыши подпакет toolchain и выбрав "Создать" > "Пустой файл". Назовите файл GNU_tuned_flavor.xml и нажмите кнопку Next ("Далее").
- Скопируйте следующий текст в 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>
- Создайте новый файл в пакете toolchain, щелкнув правой кнопкой мыши подпакет toolchain и выбрав New ("Создать") > Empty File("Пустой файл"). Назовите файл GNU_tuned_cpp.xml и нажмите кнопку Next ("Далее").
- Скопируйте следующий текст в 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 по умолчанию.
Дерево проекта выглядит следующим образом:
- В окне "Проекты" щелкните правой кнопкой мыши узел проекта mytoolchain и выберите "Выполнить". В новом экземпляре среды IDE будет создан и установлен модуль, представляющий собой целевую платформу по умолчанию для модулей. Oткроется целевая платформа для тестирования нового модуля.
- В выполняемом модуле выберите "Сервис" > "Параметры", затем в верхней панели окна параметров выберите "C/C++" и перейдите на вкладку "Средства сборки".
- Если новый набор средств (GNU_tuned) не отображается, нажмите кнопку "Восстановить параметры по умолчанию". В запросе на повторный поиск в среде нажмите кнопку "Да" для продолжения работы. В среде IDE появится новый набор средств:
- Создайте новый пример проекта C/C++ Welcome путем выбора "Файл" > "Создать проект" > "Примеры" > "C/C++" > "Welcome".
- Щелкните правой кнопкой узел проекта и выберите команду "Свойства". В диалоговом окне "Свойства проекта" выберите узел "Сборка", укажите набор средств GNU_tuned, затем нажмите кнопку "OK" .
- Выполните сборку проекта. Убедитесь, что для компилятора установлены флаги -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
В диалоговом окне "Свойства проекта" выберите набор средств GNU и нажмите кнопку "ОК".
- Выполните повторную сборку проекта и сравните строку компиляции со строкой в окне вывода:
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) и добавить его в качестве подключаемого модуля:
- Щелкните правой кнопкой мыши проект модуля mytoolchain и выберите "Создать NBM". В подкаталоге сборки проекта будет создан файл .nbm, который также отображается на вкладке файлов.
- Выберите "Сервис" > "Подключаемые модули", затем в диалоговом окне "Подключаемые модули" перейдите на вкладку "Загрузки".
- Нажмите кнопку "Добавить подключаемые модули", перейдите к каталогу сборки, выберите модуль файла .nbm и нажмите кнопку "Открыть". Подключаемый модуль будет добавлен в список на вкладке "Загрузки".
- Для выбора модуля установите флажок на вкладке "Загрузки", затем нажмите кнопку "Установить". Откроется мастер установки подключаемых модулей NetBeans.
- Нажимайте кнопку "Далее" для перехода к последующим действиям мастера вплоть до последнего действия.
- Перезапустите среду IDE, выберите "Сервис" > "Параметры", затем в верхней панели окна параметров нажмите "С/С++" и перейдите на вкладку "Средства сборки".
- Если новый набор средств (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 |
Имя службы синтаксического анализатора |
Флаги компилятора
В данной таблице описаны теги, используемые в описании компиляторов и в определении флагов компиляторов для интсорументальной цепочки.
| 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
Данный поставщик совместим со многими инструментальными цепочками, однако пользователь может создать собственный поставщик.
Для создания собственного поставщика компилятора выполните следующие действия:
Создание обработчика ошибок для пользовательского компилятора
В среде 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>
|