corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

使用 C/C++ 工具集合描述符 - NetBeans IDE 6.8 教程

目录

本页上的内容适用于 NetBeans IDE 6.8

要学习本教程,您需要具备以下软件。

软件 要求的版本
NetBeans IDE(支持 C/C++) 版本 6.8
Java Development Kit (JDK) 版本 6 或版本 5
C 和 C++ 编译器、makegdb 经测试可以与 NetBeans IDE 配合使用的 C/C++ 工具集合

请参见 NetBeans IDE 6.8 安装说明配置 NetBeans IDE 以使用 C/C++/Fortran
以获取有关下载并安装所需软件的信息。

简介

是否要更改 NetBeans IDE 用于编译 C/C++ 文件的缺省编译器标志?是否要添加 NetBeans IDE 不支持的编译器?本文可以帮助您完成此操作!本教程说明了如何在 NetBeans IDE 6.8 中编辑现有工具集合或创建定制工具集合。

工具集合

工具集合是一组编译器、make 实用程序和调试器。每次编译、生成或调试代码时,NetBeans IDE 都会运行一个在工具集合描述符中描述的可执行文件。代码帮助功能使用从工具集合中获取的包含路径和宏。

工具集合描述符是一个位于 ${NB}/cnd2/modules/org-netbeans-modules-cnd.jar 模块中的 xml 文件,该模块位于 org/netbeans/modules/cnd/resources/toolchain/ 文件夹中。不应编辑这些原始 NetBeans 工具描述符 xml 文件。本文介绍了如何创建可编辑的副本。

编辑工具集合描述符

编辑工具集合描述符有些棘手,因为 NetBeans IDE 没有提供编辑描述符的 GUI。不过,我们在此处介绍了如何创建工具集合描述符的相同“影子”副本,以便编辑这些副本来更改 IDE 使用这些工具的方式。

  1. 退出 IDE(如果正在运行)。
  2. 将以下标志添加到 ${NB}/etc/netbeans.conf 文件的 netbeans_default_options 条目中:
    -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. 可以编辑所使用的 toolchain 的描述符,IDE 将在重新启动后使用该描述符。有关这些描述符 XML 文件中使用的标记的信息,请参见工具集合 XML 文件的详细信息

下次启动 IDE 之前,删除 -J-Dcnd.toolchain.personality.create_shadow=true 标志。IDE 只需创建一次影子描述符。

创建定制工具集合

您可以创建自己的工具集合。以下示例创建一个包含新工具集合的新 NetBeans 模块。有关创建 NetBeans 模块的一般信息,请参见 NetBeans 插件快速入门

  1. 选择“工具”>“插件”并单击“已安装”标签,以确保 NetBeans 安装包含 Netbeans 插件开发模块。如果未安装 Netbeans 插件开发模块,请单击“可用插件”标签并安装该模块。可以在搜索框中键入“插件”以快速找到该插件。
  2. 选择“文件”>“新建项目”以创建新的 NetBeans 模块。在“新建项目”向导的“选择项目”页中,在向导的第一步中选择“NetBeans 模块”类别和“模块”项目。单击“下一步”。
  3. 在“名称和位置”页中键入项目名称(如 mytoolchain),并将所有其他字段保持不变。单击“下一步”。
  4. 在“基本模块配置”页中键入代码名称基(如 org.myhome.mytoolchain),然后选中“生成 XML 层”复选框。单击“完成”。IDE 将创建一个新项目。
  5. 在“项目”窗口的“源包”节点下找到 layer.xml 文件。双击 layer.xml 文件,以便在编辑器中将其打开。
  6. 复制以下文本并粘贴在 filesystem 标记中:

        <folder name="CND">
            <folder name="ToolChain">
                <file name="GNU_tuned.xml" url="toolchain/GNU_tuned.xml">
                    <attr name="position" intvalue="5000"/>
                    <attr name="extends" stringvalue="GNU"/>
                </file>
            </folder>
        </folder>
    
    该文本表示 IDE 将从 GNU_tuned.xml 文件中读取新工具集合的描述。

    extends 属性表示工具集合将扩展 NetBeans GNU 工具集合描述符。

  7. 创建 toolchain 子包:右键单击“源包”下的 mytoolchain 包,然后选择“新建”>“Java 包”。
  8. toolchain 包中创建新文件:右键单击 toolchain 子包,然后选择“新建”>“空文件”。将文件命名为 GNU_tuned.xml,然后单击“下一步”。
  9. 复制以下文本并粘贴在 GNU_tuned.xml 中:
    <?xml version="1.0" encoding="UTF-8"?>
    <toolchaindefinition xmlns="http://www.netbeans.org/ns/cnd-toolchain-definition/1">
        <toolchain name="GNU_tuned" display="GNU my tuned collection" family="GNU"/>
        <platforms stringvalue="sun_intel,linux"/>
        <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 工具集合描述中设置的标志。
    项目树如下所示:


  10. 在“项目”窗口中,右键单击 "mytoolchain" 项目节点并选择“运行”。将生成该模块,并将其安装在 IDE(模块的缺省目标平台)的新实例中。此时将打开目标平台,您可以在其中试用新模块。
  11. 在运行的模块中,选择“工具”>“选项”,从“选项”窗口的顶部窗格中选择 "C/C++",然后选择“生成工具”标签。
  12. 如果未显示新工具集合 (GNU_tuned),请单击“恢复缺省值”。在提示重新扫描环境时,单击“是”继续。IDE 将显示新的工具集合:


  13. 选择“文件”>“新建项目”>“样例”> "C/C++" >“欢迎信息”以创建新的 C/C++ 样例项目 Welcome
  14. 右键单击项目节点,然后选择“属性”。在“项目属性”对话框中,选择“生成”节点,将“工具集合”设置为 GNU_tuned 工具集合,然后单击“确定”。
  15. 生成项目。请注意,编译器具有 -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
  16. 在“项目属性”对话框中,选择 GNU 工具集合,然后单击“确定”。
  17. 重新生成项目,并在输出窗口中比较编译行:
    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 编译器的开发模式。

如果要在常规 IDE 中使用 GNU_tuned 工具集合的新模块,可以创建一个二进制文件(.nbm 文件)并将其添加为插件:

  1. 右键单击 mytoolchain 模块项目,然后选择“创建 NBM”。将在项目的生成子目录中创建 .nbm 文件,可以在“文件”标签中看到该文件。
  2. 选择“工具”>“插件”,然后单击“插件”对话框中的“已下载”标签。
  3. 单击“添加插件”,导航至生成目录,选择模块 .nbm 文件,然后单击“打开”。该插件模块将添加到“已下载”标签的列表中。
  4. 单击复选框以在“已下载”标签中选择该模块,然后单击“安装”按钮。将会打开 NetBeans 插件安装程序。
  5. 单击“下一步”以执行安装程序,并一直执行到安装程序完成。
  6. 重新启动 IDE,选择“工具”>“选项”,从“选项”窗口的顶部窗格中选择 "C/C++",然后选择“生成工具”标签。
  7. 如果未显示新工具集合 (GNU_tuned),请单击“恢复缺省值”。在提示重新扫描环境时,单击“是”继续。

工具集合 XML 文件的详细信息

下面介绍了工具集合 XML 文件中的最重要标记。

有关 toolchain xml 文件支持的所有标记和属性的方案,请参阅 NetBeans IDE 6.8 源树中的文件

工具集合定义标记

标记 属性 描述
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 为 "/"
Windows 上的 cygwin 为 "/cygdrive/"
base_folders base_folder 标记的容器。
一个 base_folders 标记中包含一个或多个 base_folder 标记。
base_folder 编译器基目录的描述。
此标记可以包含以下标记:
regestry 工具的 Windows 注册表项。请注意,该 XML 标记必须拼写为 "regestry",尽管该拼写是错误的。
pattern 允许 NetBeans IDE 在注册表中查找编译器的正则表达式
suffix 包含可执行文件的文件夹
path_patern 允许 NetBeans IDE 通过扫描路径查找编译器的正则表达式。请注意,该 XML 标记必须拼写为 "path_patern",尽管该拼写是错误的。
command_folders command_folder 标记的容器。
一个 command_folders 标记中包含一个或多个 command_folder 标记。
command_folder 描述类似 UNIX 的命令所在的目录。
仅 Windows 上的 MinGW 编译器需要。command_folder 标记可以包含以下标记:
regestry 命令的 Windows 注册表项。请注意,该 XML 标记必须拼写为 "regestry",尽管该拼写是错误的。
pattern 允许 NetBeans IDE 在注册表中查找命令文件夹的正则表达式
suffix 包含可执行文件的文件夹
path_patern 允许 NetBeans IDE 查找命令的正则表达式。请注意,该 XML 标记必须拼写为 "path_patern",尽管该拼写是错误的。
scanner 错误解析器服务的名称,请参见创建定制编译器错误处理程序
id 错误解析器服务的名称

编译器标志

下表列出了用于描述编译器并为 toolchain 指定编译器标志的标记。

标记 描述 GNU 编译器示例
c、cpp 一组位于以下子节点的编译器标志
recognizer 允许查找编译器的正则表达式 对于 Windows 上的 cygwin 中的 GNU
.*[\\/].*cygwin.*[\\/]bin[\\/]?$
compiler 编译器名称(可执行文件的名称) gcc 或 g++
version 版本标志 --version
system_include_paths 用于获取系统包含路径的标志 -x c -E -v
system_macros 用于获取系统宏的标志 -x c -E -dM
user_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 用于不同语言扩展的标志组

创建定制编译器提供器

NetBeans IDE 具有一个缺省编译器提供器:
org.netbeans.modules.cnd.makeproject.api.compilers.MakeProjectCompilerProvider
该提供器可满足大多数 toolchain 的需要,但您也可以创建自己的提供器。

创建您自己的编译器提供器:

  • 扩展抽象类 org.netbeans.modules.cnd.api.compilers.CompilerProvider
  • 将类定义为服务并放在缺省提供器之前:
    @org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.api.compilers.CompilerProvider.class,
    position=500)
    public class CustomCompilerProvider extends CompilerProvider {
    ...
    }
    
    position=500 属性保证在缺省提供器之前调用定制提供器。对于应覆盖的工具,定制提供器应在 "createCompiler()" 方法中返回非 NULL "Tool"。

创建定制编译器错误处理程序

NetBeans IDE 有两个缺省编译器错误处理程序。

  • 用于 GNU 编译器
  • 用于 Sun Studio 编译器

GNU 编译器处理程序可满足任何 GNU 编译器的需要,但您也可以根据需要定义自己的编译器错误处理程序。

创建您自己的编译器错误处理程序:

  • 扩展抽象类 org.netbeans.modules.cnd.execution.ErrorParserProvider
  • 将类定义为服务:
    @org.openide.util.lookup.ServiceProvider(service = org.netbeans.modules.cnd.execution.ErrorParserProvider.class)
          public class CustomCompilerProvider extends ErrorParserProvider {
              ...
              @Override
              public String getID() {
          	return "MyParser";  // NOI18N
              }
          }
  • 按 ID 链接错误扫描程序和工具集合描述:
    </scanner id="MyParser">
    ...
      </scanner>