分享

ZY's WordPress ? 安装配置Eclipse-CDT

 haliiz 2010-04-07

这是我的Eclipse-CDT安装、配置笔记,记录了一些我喜欢的Eclipse-CDT配置设置,以及一些Eclipse-CDT的使用技巧。

安装Eclipse-CDT

有2种方式安装Eclipse-CDT开发环境:

  1. 先安装Eclipse基本环境:Eclipse Classic external-img: Eclipse Classic Icon

    然后安装CDT扩展:Eclipse C/C++ Development Tooling

    参考:Linux下搭建C/C++开发平台:Eclipse 3.3 + CDT4.0

  2. 直接安装集成的Eclipse C/C++开发环境:Eclipse IDE for C/C++ Developers Eclipse IDE for C/C++ Developers - Transparent Background Icon

我选择第2种:安装集成的Eclipse C/C++开发环境方式,因为Eclipse IDE for C/C++ Developers中除过CDT外,还会包含其它常用于C/C++程序开发的Eclipse扩展,它包括的扩展参考这里。同时,因为Eclipse IDE for C/C++ Developers中,去掉了在C/C++程序开发中,没用的Java开发扩展,所以它的安装空间比Eclipse Classic小。

Eclipse IDE for C/C++ Developers的安装文件就是个压缩包:Windows下为zip包,Linux下为gzip压缩的tar包。将它们解压,就算安装完成,然后执行其中的可执行文件eclipse,就可以启动Eclipse-CDT,当然前提是你的系统上要配置好Java的运行环境。

这里有我做的Eclipse IDE for C/C++ Developers的透明背景图标,可用于建立Windows的快捷方式,或Gnome的启动文件的图标。

下载:ICO文件PNG文件 Eclipse IDE for C/C++ Developers - Transparent Background Icon

常用Eclipse扩展

Eclipse的之所以强大,是因为它有众多的扩展/插件,可以自由地配置和组合,让Eclipse成为满足各类开发人员需求的集成环境。可以在网址:Eclipse Plugin Central,中查找你需要的Eclipse扩展,目前Eclipse Plugin Central已经转移到Eclipse Marketplace。下面列举几个我常用的扩展。

  • Extended VS Presentation

    这是一个Eclipse皮肤主题扩展,因为我不喜欢Eclipse默认的子窗口圆角Tab风格,就换上了这个Extended VS Presentation主题。Extended VS Presentation的风格很简约,子窗口的Tab由圆角变为矩形,所以看起来占用的空间也小了。另外,Extended VS Presentation还支持编辑会话(Editing Session)管理,编辑会话指的是当前打开的所有编辑器子窗口,Extended VS Presentation可以把当前编辑会话保存起来,下次加载这个编辑会话时,就可以将所有保存的编辑器子窗口打开,如果你用过Firefox的Session Manager扩展,就很容易理解这个功能。

    Extended VS Presentation的安装很简单,从下面的地址中下载安装包:

    Extended VS Presentation的安装包通常叫:de.loskutov.eclipseskins.extvs_[ver].jar,ver为版本号。将此jar包拷贝到Eclipse的安装目录下plugins子目录中即可。

    启动Extended VS Presentation如下:启动Eclipse后,在:WindowPreferencesGeneralAppearance设置页中,选择Current presentationExtended VS Presentation即可。

    当希望在编辑器子窗口Tab中显示所编辑文件的扩展名时,可以在:WindowPreferencesGeneralAppearanceExtended VS Presentation设置页中,将Show file extension on tab复选框勾选。另外,其它Extended VS Presentation主题的选项也在这个设置页中设定。

    Extended VS Presentation的编辑会话管理和其它功能,参考官方地址中的使用说明和示例

    这是我的Eclipse-CDT中Extended VS Presentation扩展启动后的效果:

    My Extended VS Presentation Example

  • Eclox

    Eclox是一个Eclipse的Doxygen扩展,Eclox使用图形界面设置帮你生成:Doxygen配置文件(一般叫:doxyfile),然后通过调用外部的Doxygen工具解析工程中的源码及注释,最后生成程序文档文件。

Eclipse的Workspace配置

和VC类似,Eclipse也采用Workspace→Project,这种两级的工程组织方式。当启动Eclipse时,它先会弹出Workspace Launcher这个对话框,让你指定一个Workspace的位置。你可以在Workspace:后的ComboBox中选择曾经打开的Workspace位置,也可以输入一个新的Workspace位置。

Workspace位置实际上是一个普通的目录位置,唯一的区别是:在这里目录中会有一个叫.metadata的子目录,Eclipse会将Workspace相关的所有数据、配置等放在这个目录里面。所以,如果你指定的Workspace位置中没有.metadata目录,Eclipse就会在你指定的位置创建.metadata目录,即新建了一个Workspace。

启动Eclipse后,还可以在菜单File→Switch Workspace中切换到不同的Workspace中。

总之,Workspace是一组Project的容器,目的是:为了方便管理、组织工程。一个Project默认时,总会继承它所在的Workspace中的一些设置。所以在用Eclipse-CDT建立C/C++工程之前,先设置好Workspace的配置是非常必要的。Eclipse中Workspace的配置都在:WindowPreferences 中设置。Preferences对话框中的配置项非常多,有时候很难找到需要的配置项,这里有个技巧:Preferences对话框左边配置项目录树的上面有个编辑框,它支持配置项名字索引查找,将配置项的名字输入后,就会在目录树中列出所有包含此名字的配置项,例如:想设置C/C++的语法高亮,但又记不清它在哪个配置项里,可以直接在查找编辑框中输入:color,目录树中就会显示所有包括"color"的配置项,接下来就很容易找到C/C++的语法高亮配置了,如下图:

Workspace Preference Search Example

下面是我通常使用的Workspace设置。

  • Workspace的一般配置

    Workspace的一般配置在:Preferences对话框下的General配置项下。General配置项下的设置和Eclipse中特定的编程语言环境无关,它是Eclipse基本环境的配置。我常用的General配置有以下一些:

    1. 颜色与字体

      在:GeneralAppearanceColors and Fonts 中,可以设置Eclipse各个窗口使用的字体、颜色。我通常设置的是:BasicText Font,它是Eclipse中大多数窗口显示文本的字体,比如:C/C++的源码编辑窗口就是继承这里的字体来显示C/C++源代码,其字体配置位置为:C/C++EditorC/C++ Editor Text Font。在Windows下,我的Text Font默认字体为:Courier New 10,在显示文本时,中文字符使用系统的默认中文字体:宋体,最后表现出来的字体效果是等宽的,适合用作显示源代码文本。

    2. 快捷键

      在:GeneralKeys 中,可以查看/设置Eclipse中使用的快捷键。每个快捷键的设置包括:Command,快捷键执行的命令;Binding,快捷键的按键绑定;When,何时允许激活快捷键功能,比如:C/C++ Editor,表示在C/C++编辑器窗口中;Makefile Editor,表示在Makefile编辑器窗口中。在Conflicts列表中显示冲突的快捷键。Keys配置项中包含了三套预置的快捷键设置模式:Default、Microsoft Visual Studio、Emacs。

    3. Eclipse的启动与关闭

      在:GeneralStartup and Shutdown 中,可以设置Eclipse启动与关闭时的行为,包括:Eclipse启动时自动激活的插件。如果需要在Eclipse启动时,显示Workspace Launcher对话框来选择工作的Workspace,可以将这里的Prompt for workspace on startup复选框选上(默认为选上)。

    4. 工程自动生成与保存

      在:GeneralWorkspace 中,包含与工程自动生成、保存相关的选项。常用的有:

      • Build automatically:一般将这个选项去掉,因为如果选择上的话,当保存已修改的源代码文件后,或执行Clean工程后,都会自动执行Build工程。这个选项也可以通过Eclipse菜单:ProjectBuild Automatically 设置。

      • Save automatically before build:一般将这个选项选择,意思是:在执行Build工程之前,先保存工程,包括保存已修改的源代码文件。

      • Workspace save interval:指定Workspace中所有工程的自动保存时间间隔,以分钟为单位。

    5. 文本文件的字符集编码和换行符类型

      在:GeneralWorkspace 中,可以设置文本文件的字符集编码和换行符类型。Eclipse默认继承系统的字符集设置和换行符类型,例如:在中文Windows下,Text file encoding的Default值为GBK。如果经常编辑在Windows与Linux下同时工作的源代码,为了方便工程的移植性,可以显式地将Text file encoding设置为UTF-8,并将New text file line delimiter设置为Unix。

      注意

      1. 当设置Text file encoding为UTF-8后,Eclipse新建的文本文件为不带BOM的UTF-8编码。

      2. MinGW GCC 4和Linux GCC 4对不带BOM的UTF-8编码的源文件支持都很好,所以设置Text file encoding为UTF-8,是满足方便代码移植的需求的。

      3. 无论是使用Console还是GUI的形式,要在屏幕上输出期望的字符串文本,应满足下列三个条件:

        • 在源程序中,使用合适的基本字符类型,如:char、wchar_t。并对程序依赖的运行环境、库,调用它们提供的接口,设置合适的字符集上下文,比如:C标准库的setlocale()函数,C++标准库的locale类。

        • 源程序本身用合适的字符集编码保存。

        • 程序依赖的运行环境、库,它们必需能够支持和适配程序所使用的字符集,例如:当程序通过C标准库,最终向stdout输出UTF-8编码的字符串时,下层用于显示输出的终端设备或控制台环境,必需使用UTF-8编码作为活动字符集。Windows下可以用chcp.com更改当前控制台的活动字符集,Gnome下可以在gnome-terminal的菜单中改变活动字符集。

    6. 文本编辑器的设置

      文本编辑器的一般配置在:PreferencesGeneralEditorsText Editors

      这里的部分配置会影响到C/C++源代码编辑器窗口中的源代码显示。Text Editors中常用的配置项有:

      • Displayed tab width:Tab的宽度,通常为4个空格。在C/C++源代码编辑器中,这里的配置会被C/C++的Code Style中的配置覆盖,即这里的配置对C/C++源代码编辑器显示源代码文本不起作用。

      • Insert spaces for tabs:键入Tab时,实际输入的是Tab宽度数目的空格字符。在C/C++源代码编辑器中,这里的配置会被Code Style中的配置覆盖。

      • Highlight current line:高亮当前编辑的文本行。

      • Show print margin:显示列边线。显示边线的列数Print margin column通常设置为80个字符。这个功能对程序员来说很贴心:当一行代码超过列边线时,程序员就知道这行写地有些过长了,应该换行排版。列边线通常设置为80个字符,是因为早期的字符终端通常是:25行 × 80字符/行。

      • Show line numbers:在每行文本前显示行数。显示行数后,行数和每行文本间看起来很拥挤,况且在Eclipse状态栏已经显示当前编辑光标所在的行、列数,所以我通常把这个设置去掉。

      • Show range indicator:在光标所在的文本区域前显示一个颜色块,表示这个范围内的文本属于同一个文本区域。这又是一个很贴心的功能,对于C/C++编辑器,一个函数过程就被识别为一个文本区域。

      • Show whitespace characters:以特殊的图形符号显示空白字符。空白字符包括:空格(SP)、Tab、回车(CR)、换行(LF)等。另外,除了在Workspace的Preferences中可以启动这个功能外,还可以在Eclipse的工具条中点击按钮:show whitespace characters button,来立即启动/停止显示空白字符的功能。

  • Eclipse中引用MinGW工具集

    Eclipse-CDT支持多种开发工具集(Development Toolchain):MinGW,Cygwin,Linux等,对于这些工具集,Eclipse-CDT会帮你自动设置常用的编译、链接选项,并且可以在Project的Properties设置中使用图形界面来调整编译、链接选项。如果要使用Eclipse不直接支持的工具集,比如:VC的工具集,则需要自己写Makefile来从Eclipse外部管理编译、链接选项。

    Preferences对话框的位置:C/C++New CDT project wizard 中,可以查看已被Eclipse识别的MinGW工具集:MinGW GCC。同时,可以在这里把MinGW GCC设为某一特定Project type(工程类型,包括:Executable、Shared Library、Static Library、Makefile Project)的默认工具集。

    Preferences对话框的位置:C/C++New CDT project wizardMakefile Project 中,可以进行Makefile Project工程类型的工具集配置,这些配置也可以在每个工程的属性中设置。

    • Builder Settings属性页中,可以设置使用外部生成器(External builder)的命令,默认是:make。有时MinGW工具集中将GNU Make命名为mingw32-make,可以在Build command:后输入期望的生成器命令名。

    • Behaviour属性页中,可以设置生成器的行为参数,比如对于大多make类工具:Build工程时,一般的参数为:all;Clean工程时,一般的参数为clean。另外,最好将Build on resource save (Auto build)复选框去掉,它的意思是:当保存资源时,比如:保存源代码文件时,自动进行Build工程。

  • 代码风格、模板与高亮语法

    1. C/C++代码风格

      C/C++代码风格的配置位置为:PreferencesC/C++Code Style。C/C++代码风格设置,包括:缩进方式、大括号({})的换行方式、单词间的空白字符设置等。

      Code Style已有4个内建的C/C++代码风格配置:K&R、BSD/Allman、GNU、Whitesmiths。对于应用程序,我通常选择BSD/Allman风格,因为它是Windows和Linux下都常用的代码风格。点击New按钮,选择基础的风格后,再点击Edit按钮,进入具体的代码风格元素的设置,最后可以配置出自己习惯的代码风格。

      我通常在BSD/Allman基础风格中,修改IdentationTab policySpaces only,意思是:在键入Tab时,实际输入的是Tab宽度的空格。使用空格代替Tab,对于用不同编辑器显示源代码时的效果,以及拷贝、粘贴源代码后仍保持原有缩进效果很有用。

      自己配置的代码风格,可以在代码风格Edit对话框中,点击Export按钮导出保存成文件。在Code Style界面中可以用Import导入以前保存的风格。

      技巧

      如果编辑已有的源文件,但里面的代码风格和新加入的代码风格不同,怎样快速地把以前的代码转换为现在的风格?先选择要转换的代码文本,然后在右键菜单中选择:SourceFormat,或快捷键Ctrl+Shift+F,就可以将选择的代码文本转换为当前的代码风格。

    2. 自动生成代码的模板

      自动生成代码的模板在:PreferencesC/C++Code StyleCode Templates 中设置。

      自动生成代码的模板有三个级别:注释(Comments)、代码(Code)、文件(Files)。在代码模板里可以使用很多Eclispe内置宏,比如:${date},表示当前的日期;${user},表示当前的系统登录用户。Eclipse在自动生成代码时,会将这些宏扩展成实际对应字符串。在:C/C++Template Default Values 中,有4个宏:message、sourceDir、author、copyright,可以设置它们的值,在创建Hello World工程时,自动生成的代码文件就会使用这里的宏。

    3. C/C++代码语法高亮设置

      C/C++代码语法高亮在:PreferencesC/C++EditorSyntax Coloring 中设置。

      Syntax Coloring中,CDT将语法元素分为四类:Code、Assembly、Comments、Preprocessor。选择特定的语法元素后,可以更改它使用的字体颜色、斜体、加粗、下划线效果等,设置后可以立即在下面的Preview中预览代码语法高亮效果。

      我使用的代码语法高亮方案,参考我的这篇文章:我的C/C++代码语法高亮方案

  • 代码自动完成

    CDT默认的C/C++代码自动完成功能配置已经很好用了,只需要进行调整即可。

    自动完成的代码模板在:PreferencesC/C++EditorTemplates 中设置。注意,这里的模板功能和Code Style中Code Templates之间的区别:Code Templates是Eclipse自动生成代码的模板,而这里的Templates是程序员输入一部分代码后,要求Eclipse自动完成、补全所有代码的模板。

    可以自己新建,或更改已有的自动完成代码模板。自动完成代码模板分两类:

    • C/C++代码的自动完成。此时模板的Context为C/C++,包括C/C++语句、代码块等的自动完成。比如:建立一个Name为main的模板,在Pattern中输入以下代码文本模式:

      1 int main(int argc, char** argv)
      2 {
      3     ${cursor}
      4     return 0;
      5 }

      编辑C/C++源代码时,输入main(即模板的Name),然后按快捷键Alt+/,就可以直接插入上面的main函数代码块。${cursor}是个宏,表示当这段代码插入完成之后,编辑光标停留的位置。

    • 注释的自动完成。此时模板的Context为Comment,而且只在注释区域内进行自动完成。

    注意:CDT中默认的模板都是K&R的代码风格,喜欢BSD/Allman风格的话,需要修改一下。

    自动完成代码模板配置好后,接下来需要调整自动完整功能的配置,位置在:PreferencesC/C++EditorContent Assist

    首先需要将Content AssistAdvanced中的:Select the proposal kinds contained in the 'default' content assist list 中的Template Proposals选择上。这里的意思是:将Template Proposals放入Default Proposals中,Template Proposals是指模板候选代码完成的类别,即使用上面提到的在Templates 中设置的内容来进行候选完成代码的生成。另外还有其它类别的候选完成代码:Help Proposals、Parsing-based Proposals、Word Proposals。

    然后可以在Content Assist中的Insertion中,将Insert single proposals automatically去掉,这个选项的意思是:当只有一个候选完成功能(Proposal)匹配当前文本时,直接插入文本到文件中,而不给用户选择的机会。

    代码自动完成的启动方法:光标定位到要自动完成的文字后,选择右键菜单中的:SourceContent Assist,或快捷键Alt+/,此时会弹出完成代码上下文菜单,里面列举了候选的完成代码,用户选择一个后,就会插入这段完成代码到源文件中。如果在弹出完成代码菜单的情况下,继续按快捷键Alt+/,菜单中的内容就会在不同类别的候选完成代码间切换,切换的顺序可以在Content AssistAdvanced中的:Content assist cycling 中设置。代码自动完成效果如下:

    C/C++ code auto complete example

  • 名字高亮显示

    名字:指C/C++代码中的变量名、函数名、宏名、自定义类型名等实体名字。名字高亮显示(Mark Occurrences):指光标停在一个名字上后,在这个名字的作用域内,高亮显示所有出现的这个名字。

    名字高亮显示的在:PreferencesC/C++EditorMark Occurrences 中设置。选择:Mark occurrences of the selected element in the current file 选项,就会启动名字高亮显示功能。另外有个:Keep marks when the selection changes 选项,它的意思是:光标第一次定位到某个名字上时,高亮显示这个名字,此时如果将光标移到另外的非其它名字的位置,先前的那个名字依然被高亮显示,直到光标移到其它名字上时,才会取消原来名字的高亮显示,转而高亮显示新定位的名字。

    另外,还可以在Eclipse的工具条中点击按钮:Mark occurrences button,来立即启动/停止名字高亮显示功能。

    名字高亮显示所使用的颜色在:PreferencesGeneralEditorsText EditorsAnnotations 中设置,选择Annotation types中的C/C++ Occurrences,然后设置颜色即可,我通常将它设置为正黄色(RGB(255,255,0))。

    名字高亮显示的效果如下:

    Mark occurrences example

  • 任务标记

    CDT中使用任务(Task)来管理开发计划,任务是Workspace级别的:一个Workspace中所有Project的任务都在Tasks窗口中列出,Tasks窗口可用菜单WindowShow ViewTasks调出。

    任务标记(Task Tag)是一种特殊格式的C/C++代码注释,CDT会扫描并识别这种注释,生成一条任务。由任务标记生成的任务,在Task窗口中双击后,代码编辑器会立即跳转到对应的任务标记注释位置,并在那行注释前显示图标:Task tag icon。这个功能的意义在于:先记录发生问题的代码位置,方便以后解决问题。

    任务标记的注释格式在:PreferencesC/C++>→Task Tags 中设置,默认的任务标记格式是:注释中包含"TODO"。任务标记的使用效果如下:

    Task tag example

  • 符号检索

    符号检索是对一个工程中所有C/C++源代码中各种符号、名字引用的快速定位。目前优秀的代码编辑环境都支持符号检索,比如:VC内置的Intellisense、VC的Visual Assist X插件、SourceInsight等。目前,无论是哪种支持符号检索的编辑环境,在使用符号检索功能前,都需要对一个工程中的C/C++源代码进行扫描,生成索引数据库,例如VC的.ncb文件,就是VC的Intellisense生成的索引数据库文件。

    CDT的索引数据库文件格式是.pdom,保存在Workspace的配置目录:.metadata/.plugins/org.eclipse.cdt.core 目录下,索引数据库文件名格式一般是:[Project-Name].[Random-NO].pdom。

    索引数据库的生成选项在Workspace和Project中都可以配置,Project中的配置会覆盖Workspace中的配置。Workspace中索引的配置在:C/C++Indexer 中。

    Indexer中,可以选择三种建立索引的基本方式:Fast C/C++ Indexer(快速索引)、Full C/C++ Indexer(完全索引)、No Indexer(无索引),一般选择Fast C/C++ Indexer,就足够对一般工程的代码进行准确地符号检索了。如果觉得使用Fast C/C++ Indexer时,有些符号仍然不能正确检索,可以将选项Index all files选择上,不过这样建立的索引文件就会变大,建立索引的过程也会变慢,所以不建议在Workspace的索引配置里选择这个选项。

    Files to index up-front中输入的文件名,会在建立索引时首先被扫描,默认是:stdarg.h、stddef.h、sys/types.h。

    Indexing strategy可以设置建立索引活动的策略:

    • Automatically update the index:自动更新索引。
    • Update index immediately after every file-change:当文件内容改变后,立即更新索引。

    CDT的索引建立过程本来就有些慢,而上面两个选项会使建立索引活动变得更频繁。不过为了在最新的代码文件中使用准确的符号检索,一般将这两个选项选择。

    Build configuration for the index中,可以指定索引配置如何应用到工程配置项中:

    • Use active build configuration:使用活动的工程配置项建立工程的索引。我一般使用这个选项,因为工程配置项会影响到C/C++源代码和符号检索,比如:一段代码受工程配置项中的宏定义影响,而使用不同的内容。
    • Use the build configuration specified in the project's indexer settings:在Workspace中不指定被索引的工程配置项,将该任务放到Project的配置中设置。

    使用符号检索的方法有多种。最简单、最常用的是跟踪符号到其定义或声明,方法是:按住Ctrl键,然后点击某个符号,就会跳转到其定义或声明位置。

  • 备份与移植Workspace配置

    好不容易设置起来的Workspace配置,怎样将它备份呢?怎样将一个已设置好的Workspace配置,应用到所有Workspace上呢?

    对一个Workspace配置的备份其实就是备份Workspace的配置目录.metadata:先在Eclipse中删除该Workspace的所有Project;然后在关闭Eclipse,在.metadata中搜索所有跟Project有关的文件,删除掉,比如工程的索引数据库文件.pdom;最后备份这个.metadata目录即可。

    当要使用以前备份好的Workspace配置时,将备份的.metadata目录拷贝到期望建立Workspace的目录下,然后启动Eclipse时,在Workspace Launcher对话框中,输入那个Workspace目录的位置,就可以让Eclipse使用已设置好的Workspace配置。

    Workspace Launcher对话框中显示的最近打开的Workspace,保存在Eclipse的程序配置目录中的:configuration/.settings/org.eclipse.ui.ide.prefs 文件中。org.eclipse.ui.ide.prefs中的RECENT_WORKSPACES值记录了最近打开的Workspace,如果要清空最近打开的Workspace记录,将它的值设置为空即可。

Eclipse的Project配置

C/C++ Projects窗口中显示了当前Workspace的所有Project,C/C++ Projects窗口可以使用菜单:WindowShow ViewC/C++ Projects调出。

选定一个Project后,可以用菜单:ProjectProperties,或右键菜单中的Properties(快捷键:Alt+Enter)调出特定工程的配置对话框。

工程配置会继承Workspace中的一些配置,如果工程配置中改变这部分配置的话,工程的设置会覆盖掉Workspace的设置。在工程配置中C/C++ General下有些配置项有:Enable project specific settings选项,启动这个选项后,会在工程目录下产生.settings目录,里面记录了工程特定的设置。

  • 工程的工具集配置

    Eclipse-CDT默认能够建立4种工程类型:ExecutableShared LibraryStatic LibraryMakefile Project

    如果希望Eclipse-CDT,通过扫描工程中的源文件,帮你自动生成makefile,则可以选择前3种工程类型,这种情况通常应用在使用Eclipse新建一个工程时。

    如果希望使用手工编辑makefile的方式,来管理工程的生成,可以选择Makefile Project的工程类别。

    实际上,只要在工程配置中进行适当设置,Eclipse的每一种工程类别都能用来管理外部已存在的工程。

    当我使用Eclipse新建一个工程时,通常使用:CDT自动生成makefile,配合外部make工具的方式。配置方式如下;

    建立一个Executable类型的工程。在工程配置中的C/C++ BuildTool Chain Editor中的Current toolchain可以指定工程特定的工具集,例如:MinGW GCC。在Current builder中,将默认的:CDT Internal Builder(CDT内建的make工具),改为:Gnu Make Builder。最后在Select Tools中可以替换工具集中的每种工具。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多