使用 C/C++ 工具集合描述符 - NetBeans IDE 6.8 教程
撰稿人:
,维护人:Susan Morgan
2009 年 12 月 [修订版本号:V6.8-1]
目录
要学习本教程,您需要具备以下软件。
请参见 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 使用这些工具的方式。
- 退出 IDE(如果正在运行)。
- 将以下标志添加到 ${NB}/etc/netbeans.conf 文件的 netbeans_default_options 条目中:
-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
- 可以编辑所使用的 toolchain 的描述符,IDE 将在重新启动后使用该描述符。有关这些描述符 XML 文件中使用的标记的信息,请参见工具集合 XML 文件的详细信息。
下次启动 IDE 之前,删除 -J-Dcnd.toolchain.personality.create_shadow=true 标志。IDE 只需创建一次影子描述符。
创建定制工具集合
您可以创建自己的工具集合。以下示例创建一个包含新工具集合的新 NetBeans 模块。有关创建 NetBeans 模块的一般信息,请参见 NetBeans 插件快速入门。
- 选择“工具”>“插件”并单击“已安装”标签,以确保 NetBeans 安装包含 Netbeans 插件开发模块。如果未安装 Netbeans 插件开发模块,请单击“可用插件”标签并安装该模块。可以在搜索框中键入“插件”以快速找到该插件。
- 选择“文件”>“新建项目”以创建新的 NetBeans 模块。在“新建项目”向导的“选择项目”页中,在向导的第一步中选择“NetBeans 模块”类别和“模块”项目。单击“下一步”。
- 在“名称和位置”页中键入项目名称(如 mytoolchain),并将所有其他字段保持不变。单击“下一步”。
- 在“基本模块配置”页中键入代码名称基(如 org.myhome.mytoolchain),然后选中“生成 XML 层”复选框。单击“完成”。IDE 将创建一个新项目。
- 在“项目”窗口的“源包”节点下找到 layer.xml 文件。双击 layer.xml 文件,以便在编辑器中将其打开。
- 复制以下文本并粘贴在 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 工具集合描述符。
- 创建 toolchain 子包:右键单击“源包”下的 mytoolchain 包,然后选择“新建”>“Java 包”。
- 在 toolchain 包中创建新文件:右键单击 toolchain 子包,然后选择“新建”>“空文件”。将文件命名为 GNU_tuned.xml,然后单击“下一步”。
- 复制以下文本并粘贴在 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 工具集合描述中设置的标志。
项目树如下所示:
- 在“项目”窗口中,右键单击 "mytoolchain" 项目节点并选择“运行”。将生成该模块,并将其安装在 IDE(模块的缺省目标平台)的新实例中。此时将打开目标平台,您可以在其中试用新模块。
- 在运行的模块中,选择“工具”>“选项”,从“选项”窗口的顶部窗格中选择 "C/C++",然后选择“生成工具”标签。
- 如果未显示新工具集合 (GNU_tuned),请单击“恢复缺省值”。在提示重新扫描环境时,单击“是”继续。IDE 将显示新的工具集合:
- 选择“文件”>“新建项目”>“样例”> "C/C++" >“欢迎信息”以创建新的 C/C++ 样例项目 Welcome。
- 右键单击项目节点,然后选择“属性”。在“项目属性”对话框中,选择“生成”节点,将“工具集合”设置为 GNU_tuned 工具集合,然后单击“确定”。
- 生成项目。请注意,编译器具有 -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 编译器的开发模式。
如果要在常规 IDE 中使用 GNU_tuned 工具集合的新模块,可以创建一个二进制文件(.nbm 文件)并将其添加为插件:
- 右键单击 mytoolchain 模块项目,然后选择“创建 NBM”。将在项目的生成子目录中创建 .nbm 文件,可以在“文件”标签中看到该文件。
- 选择“工具”>“插件”,然后单击“插件”对话框中的“已下载”标签。
- 单击“添加插件”,导航至生成目录,选择模块 .nbm 文件,然后单击“打开”。该插件模块将添加到“已下载”标签的列表中。
- 单击复选框以在“已下载”标签中选择该模块,然后单击“安装”按钮。将会打开 NetBeans 插件安装程序。
- 单击“下一步”以执行安装程序,并一直执行到安装程序完成。
- 重新启动 IDE,选择“工具”>“选项”,从“选项”窗口的顶部窗格中选择 "C/C++",然后选择“生成工具”标签。
- 如果未显示新工具集合 (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 指定编译器标志的标记。
| 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 的需要,但您也可以创建自己的提供器。
创建您自己的编译器提供器:
创建定制编译器错误处理程序
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>
|