文档

coder.make.ToolchainInfoclass

包:coder.make

代表定制工具链

描述

使用coder.make.ToolchainInfo定义和注册一个新的软件构建工具(工具链)与MathWorks®代码生成产品。s manbetx 845

工具链定义的工具链信息,使用getDefaultToolchaingetToolchainInfoFromRegistry

一个coder.make.ToolchainInfo对象包含:

  • coder.make.BuildTool对象可以描述每一个构建工具

  • coder.make.BuildConfiguration可以应用的对象的选项来构建工具集

建设

h= coder.make.ToolchainInfo创建一个默认的ToolchainInfo对象和分配处理,h

默认的ToolchainInfo对象包括BuildTool对象和配置C、c++和gmake:

  • 的默认值万博1manbetxSupportedLanguages,C / c++补充说,BuildToolBuildConfiguration对于C和c++编译器对象ToolchainInfo

  • 的默认值BuildArtifact,gmake,增加了一个BuildTool对象为gmakeToolchainInfo.BuilderApplication

您可以使用输入参数(名称-值对)当你创建覆盖这些默认值ToolchainInfo对象。每个属性是可选的。每个属性都需要相应的值。这个例子覆盖万博1manbetxSupportedLanguagesBuildArtifact默认值。

h= coder.make.ToolchainInfo ('万博1manbetxSupportedLanguages”,vLanguages”,BuildArtifact”,vArtifact)

的默认属性值万博1manbetxSupportedLanguagesBuildArtifact只能覆盖在工具链的创建信息对象。在对象创建这些属性是只读的。

输入参数

全部展开

属性名。有关更多信息,请参见属性描述BuildArtifact

的值BuildArtifact属性,指定为一个特征向量。

属性名。有关更多信息,请参见属性描述的名字

独特的工具链定义的名称,指定为一个特征向量。默认值是空的。

属性名。有关更多信息,请参见属性描述平台

支持的平万博1manbetx台,指定为一个特征向量。默认值为当前的平台。

属性名。有关更多信息,请参见属性描述修订

ToolchainInfo修订号,指定为一个特征向量。

属性名。有关更多信息,请参见属性描述万博1manbetxSupportedLanguages

万博1manbetx支持语言或语言,指定为一个特征向量。

属性名。有关更多信息,请参见属性描述万博1manbetxSupportedVersion

ToolchainInfo支持版本的软件构建工具,指定为一个特征向量。万博1manbetx默认值是空的

输出参数

全部展开

一个coder.make.ToolchainInfo对象,指定使用一个对象处理,如h。创建h,输入h = coder.make.ToolchainInfo在MATLAB®命令窗口。

属性

全部展开

工具链的自定义属性

添加自定义属性所需的工具链并指定默认值。

默认情况下,自定义属性的列表是空的。

属性返回一个coder.make.util.UnorderedList

例如,intel_tc.m文件从添加一个自定义工具链定义了以下自定义属性:

tc.addAttribute (“TransformPathsWithSpaces”);tc.addAttribute (“RequiresCommandFile”);tc.addAttribute (“RequiresBatchFile”);

来显示属性在MATLAB命令窗口列表的例子中,输入:

h = intel_tc;h.Attributes
ans = # - - - - - - - - - - - - - - - - - - - #“属性”列表# - - - - - - - - - - - - - - - - - - - RequiresBatchFile = true RequiresCommandFile = true TransformPathsWithSpaces = true

使用以下方法属性:

属性:

GetAccess 公共
SetAccess 公共

makefile的类型(构建工件)MATLAB编码器™使用软件构建过程中。

当您创建初始化这个属性coder.make.ToolchainInfo。使用默认值,gmake makefile使用名称-值对,或覆盖默认值参数,所述建设

例如:

h = coder.make.ToolchainInfo (“BuildArtifact”,“nmake”);
值可以是:

  • “gmake”“gmake makefile”——GNU工具

  • “nmake”nmake makefile的——窗户®使实用程序

例如,要显示的值BuildArtifact在MATLAB命令窗口中,输入:

h = coder.make.ToolchainInfo;h.BuildArtifact
ans = gmake makefile

ToolchainInfo使用的价值BuildArtifact属性来创建一个BuildTool对象为构建工件coder.make.ToolchainInfo.BuilderApplication

intel_tc.m文件从添加一个自定义工具链示例使用以下行设置的值BuildArtifact:

tc = coder.make。ToolchainInfo(“BuildArtifact””,nmake makefile');

没有方法来使用BuildArtifact

属性:

GetAccess 公共
SetAccess 受保护的

构建配置列表

这个列表中的每个条目是一个coder.make.BuildConfiguration对象。

例如,intel_tc.m文件从添加一个自定义工具链,使用以下行来定义构建配置:

cfg = tc。getBuildConfiguration(“加快构建”);cfg。setOption (C编译器,horzcat (cCompilerOpts optimsOffOpts));cfg。setOption (c++编译器,horzcat (cppCompilerOpts optimsOffOpts));cfg.setOption(“链接”,linkerOpts);cfg。setOption(共享库链接器,sharedLinkerOpts);cfg.setOption(“文档”,archiverOpts); cfg = tc.getBuildConfiguration('Faster Runs'); cfg.setOption('C Compiler',horzcat(cCompilerOpts,optimsOnOpts)); cfg.setOption('C++ Compiler',horzcat(cppCompilerOpts,optimsOnOpts)); cfg.setOption('Linker',linkerOpts); cfg.setOption('Shared Library Linker',sharedLinkerOpts); cfg.setOption('Archiver',archiverOpts); cfg = tc.getBuildConfiguration('Debug'); cfg.setOption('C Compiler',horzcat(cCompilerOpts,optimsOffOpts,debugFlag.CCompiler)); cfg.setOption('C++ Compiler',horzcat(cppCompilerOpts,optimsOffOpts,debugFlag.CppCompiler)); cfg.setOption('Linker',horzcat(linkerOpts,debugFlag.Linker)); cfg.setOption('Shared Library Linker',horzcat(sharedLinkerOpts,debugFlag.Linker)); cfg.setOption('Archiver',horzcat(archiverOpts,debugFlag.Archiver)); tc.setBuildConfigurationOption('all','Download',''); tc.setBuildConfigurationOption('all','Execute',''); tc.setBuildConfigurationOption('all','Make Tool','-f $(MAKEFILE)');

来显示BuildConfigurations在MATLAB命令窗口列表的例子中,输入:

h = intel_tc;h.BuildConfigurations
ans = # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #“BuildConfigurations”列表# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Debug = < coder.make。BuildConfiguration > = < coder.make构建快。BuildConfiguration> Faster Runs = 

使用以下方法BuildConfigurations:

属性:

GetAccess 公共
SetAccess 公共

工具链的构建工具的列表。

这个列表中的每个条目是一个coder.make.BuildTool对象。

当你初始化ToolchainInfo,万博1manbetxSupportedLanguages在创建属性决定了它的构建工具BuildTools。有关更多信息,请参见万博1manbetxSupportedLanguages建设

BuildToolToolchainInfo可以创建基于对象万博1manbetxSupportedLanguages是:

  • 汇编程序

  • C编译器

  • c++编译器

  • 链接器

  • 存储服务器

例如,intel_tc.m文件从添加一个自定义工具链,使用下列命令行获取和更新的BuildTool对象:

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % C编译器% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -工具= tc。getBuildTool (C编译器);工具。setName(“英特尔C编译器”);tool.setCommand (icl);tool.setPath (");tool.setDirective (‘IncludeSearchPath’,‘我’);tool.setDirective (“PreprocessorDefine”,“- d”);tool.setDirective (“OutputFlag”、“佛”);tool.setDirective(“调试”、“子”);tool.setFileExtension(“源”、“c”); tool.setFileExtension('Header','.h'); tool.setFileExtension('Object','.obj'); tool.setCommandPattern('|>TOOL<| |>TOOL_OPTIONS<| |>OUTPUT_FLAG<||>OUTPUT<|');

来显示BuildTools在MATLAB命令窗口列表的例子中,输入:

h = intel_tc;h.BuildTools
ans = # - - - - - - - - - - - - - - - - - - - #“BuildTools”列表# - - - - - - - - - - - - - - - - - - - C编译器= < coder.make。BuildTool > = < coder.make c++编译器。BuildTool >文档= < coder.make。BuildTool >链接= < coder.make。BuildTool> MEX Tool = 

使用以下方法BuildTools:

属性:

GetAccess 公共
SetAccess 公共

构建工具的属性的makefile或构建工件

ToolchainInfo使用的价值BuildArtifact属性来创建一个BuildTool对象coder.make.ToolchainInfo.BuilderApplication描述的一样,建设

例如,intel_tc.m文件从添加一个自定义工具链,使用下列命令行设置BuildArtifact和更新BuilderApplication对象:

h = coder.make.ToolchainInfo (“BuildArtifact”,“nmake”);

显示的值BuilderApplication从这个例子中MATLAB命令窗口中,输入:

h.BuilderApplication
ans = # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #构建工具:NMAKE工具# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #语言:“OptionsRegistry:{‘使工具’,‘MAKE_FLAGS} InputFileExtensions: {}万博1manbetx OutputFileExtensions: {} DerivedFileExtensions: {} SupportedOutputs: {‘*’} CommandPattern: ' | >工具< | | > TOOL_OPTIONS < | ' # - - - - - - - - - - - - #命令# - - - - - - - - - - - -让= NMAKE MAKE_PATH = # - - - - - - - - - - - - #指令# - - - - - - - - - - - -评论= # DeleteCommand = @del DisplayCommand = @echo FileSeparator = \ ImpliedFirstDependency = $ < ImpliedTarget = $ @ IncludeFile = !包括LineContinuation = \ MoveCommand = @mv ReferencePattern = \ \美元(1美元\)RunScriptCommand = @cmd / c# - - - - - - - - - - - - - - - - - - #文件扩展名# - - - - - - - - - - - - - - - - - - Makefile =楼上

使用setBuilderApplication方法BuilderApplication

属性:

GetAccess 公共
SetAccess 公共

命令工具链需要内联在生成的makefile

指定要逐字插入makefile内联命令。默认值是

数据类型是特征向量。

例如,显示然后更新的值InlinedCommands属性,使用MATLAB命令窗口中输入:

h.InlinedCommands
ans = "
h.InlinedCommands=”!包括< ntwin32.mak >;h.InlinedCommands
!包括< ntwin32.mak >

添加一个自定义工具链不包括示例InlinedCommands财产。

没有方法来使用InlinedCommands

属性:

GetAccess 公共
SetAccess 公共

MATLAB清理命令

指定MATLAB命令或脚本执行特定于这个工具链清理例程。使用命令或脚本,可以调用MATLAB命令窗口。默认值是空的。

数据类型是一个单元阵列的特征向量。

例如,显示然后更新的值MATLABSetupMATLABCleanup属性,使用MATLAB命令窗口中输入:

h = coder.make.ToolchainInfo;h.MATLABSetup;h.MATLABCleanup;h。MATLABSetup {1} = sprintf (“如果ispc \ n origTMP = getenv (TMP);\ n setenv (“TMP”、“C: \ \ TEMP”); \ nend ');h。MATLABCleanup {1} = sprintf (“如果ispc \ n setenv (“TMP”, origTMP);\ nend ');

下面的列表说明,这个属性适合的顺序操作:

  1. MATLAB的设置

  2. 壳安装

  3. Prebuild

  4. 构建(汇编程序、编译器、链接器、文档)

  5. Postbuild

    1. 下载

    2. 执行

  6. 壳清理

  7. MATLAB清理

添加一个自定义工具链不包括示例MATLABCleanup财产。

没有方法来使用MATLABCleanup

属性:

GetAccess 公共
SetAccess 公共

MATLAB设置命令

指定MATLAB命令或脚本执行特定于这个工具链安装例程。使用命令或脚本,可以调用MATLAB命令窗口。默认值是空的。

数据类型是一个单元阵列的特征向量。

例如,显示然后更新的值MATLABSetupMATLABCleanup属性,使用MATLAB命令窗口中输入:

h = coder.make.ToolchainInfo;h.MATLABSetup;h.MATLABCleanup;h。MATLABSetup {1} = sprintf (“如果ispc \ n origTMP = getenv (TMP);\ n setenv (“TMP”、“C: \ \ TEMP”); \ nend ');h。MATLABCleanup {1} = sprintf (“如果ispc \ n setenv (“TMP”, origTMP);\ nend ');

下面的列表说明,这个属性适合的顺序操作:

  1. MATLAB的设置

  2. 壳安装

  3. Prebuild

  4. 构建(汇编程序、编译器、链接器、文档)

  5. Postbuild

    1. 下载

    2. 执行

  6. 壳清理

  7. MATLAB清理

添加一个自定义工具链不包括示例MATLABSetup财产。

没有方法来使用MATLABCleanup

属性:

GetAccess 公共
SetAccess 公共

自定义宏列表包含宏名称和值

是一个列表coder.make.util.OrderedListcoder.make.BuildItem对象。

默认情况下这个列表是空的。例如:

h = coder.make.ToolchainInfo;h.Macros
ans = # - - - - - - - - - - - - - - - - - - #“宏”列表# - - - - - - - - - - - - - - - - - -(空的)

ToolchainInfo使用宏在两个方面:

  • 写宏,使用当前的构建makefile的变量。例如:

    TI_INSTALL = C:\Program Files\CCSv4 TI_C2000_TOOLS = $ (TI_INSTALL) \ \工具编译器\ c2000 \ bin

  • 当自定义工具链已经注册,验证扩展一个宏提供的完整路径,包括宏中包含宏。例如,当ToolchainInfo验证路径在下面编译器信息,它膨胀TI_C2000_TOOLSTI_INSTALL:

    命令= ' cl2000 '路径= ' $ (TI_C2000_TOOLS) '

的默认值是一个空列表。

数据类型是coder.make.util.OrderedListcoder.make.BuildItem对象。

例如,intel_tc.m文件从添加一个自定义工具链使用下列命令行添加宏:

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %宏% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tc.addMacro (“MW_EXTERNLIB_DIR”,“美元(MATLAB_ROOT) \走读生\ lib \ ' tc。平台' \ microsoft ']);tc.addMacro (' MW_LIB_DIR ', ' $ (MATLAB_ROOT) \ lib \ ' tc.Platform]);tc.addMacro (“CFLAGS_ADDITIONAL”、“-D_CRT_SECURE_NO_WARNINGS”);tc。addMacro (“CPPFLAGS_ADDITIONAL”、“ehs -D_CRT_SECURE_NO_WARNINGS”);tc.addMacro (' LIBS_TOOLCHAIN ', ' $ (conlibs) ');tc.addMacro (‘CVARSFLAG’,”);tc.addIntrinsicMacros ({‘ldebug’,‘conflags’,‘cflags});

例子,看到相应的属性值在MATLAB命令窗口中,输入:

h = intel_tc;h.Macros
ans = # - - - - - - - - - - - - - - - - - - #“宏”列表# - - - - - - - - - - - - - - - - - - MW_EXTERNLIB_DIR = $ (MATLAB_ROOT) \走读生\ lib \ win64 \微软MW_LIB_DIR = $ (MATLAB_ROOT) \ lib \ win64 CFLAGS_ADDITIONAL = -D_CRT_SECURE_NO_WARNINGS CPPFLAGS_ADDITIONAL = ehs -D_CRT_SECURE_NO_WARNINGS LIBS_TOOLCHAIN = $ (conlibs) CVARSFLAG = ldebug = conflags = cflags =

与这个属性使用以下方法:

属性:

GetAccess 公共
SetAccess 公共

独特的工具链定义的名称

指定完整的工具链的名称。这个名字也出现的工具链参数选项硬件选项卡的项目构建设置。默认值是空的。推荐的格式是:

的名字版本|建立工件(平台)

数据类型是特征向量。

例如,intel_tc.m文件从添加一个自定义工具链使用以下行来定义的值的名字:

tc。Name = "英特尔v12.1 | nmake makefile(64位Windows) ';

这个例子,在MATLAB命令窗口中看到相应的属性值,输入:

h = intel_tc;h.Name
ans =英特尔v12.1 | nmake makefile(64位Windows)

属性:

GetAccess 公共
SetAccess 公共

指定支持平台万博1manbetx

指定的平台将使用工具链。默认值为当前的平台。万博1manbetx支持的值win32,win64,maci64,glnxa64

创建一个单独的ToolchainInfo为每个平台。

数据类型是特征向量。

这个属性没有任何关联的方法。直接赋值平台

例如,intel_tc.m文件从添加一个自定义工具链使用以下行来定义的值平台:

tc。平台=“win64”;

例子,看到相应的属性值在MATLAB命令窗口中,输入:

h = intel_tc;h.Platform
ans = win64

属性:

GetAccess 公共
SetAccess 公共

工具的列表调用链接器/文档后使用。

是一个列表coder.make.util.OrderedListcoder.make.BuildTool对象。

默认情况下,包含两个列表BuildTool对象:下载执行

看到相应的属性值在MATLAB命令窗口中,输入:

h = coder.make.ToolchainInfo;h.PostbuildTools
ans = # - - - - - - - - - - - - - - - - - - - - - - - - #“PostbuildTools”列表# - - - - - - - - - - - - - - - - - - - - - - - - = < coder.make下载。BuildTool >执行= < coder.make.BuildTool >

添加一个自定义工具链不包括示例PostbuildTools财产。

与这个属性使用以下方法:

属性:

下载 公共
执行 公共

使用的工具列表之前编译源文件到目标文件。

是一个列表coder.make.util.OrderedListcoder.make.BuildTool对象。

默认情况下这个列表是空的。例如:

h.PrebuildTools
ans = # - - - - - - - - - - - - - - - - - - - - - - - #“PrebuildTools”列表# - - - - - - - - - - - - - - - - - - - - - - -(空的)

添加一个自定义工具链不包括示例PrebuildTools财产。

与这个属性使用以下方法:

属性:

GetAccess 公共
SetAccess 公共

修订号分配给ToolchainInfo

工具链定义文件的作者可以使用这些信息来区分文件的一个版本。默认值是1.0

数据类型是特征向量。

这个属性没有任何关联的方法。直接赋值修订

例如:

h.Revision
ans = 1.0
h.Revision=“2.0”;h.Revision
ans = 2.0

属性:

GetAccess 公共
SetAccess 公共

Shell脚本,清理工具链

指定特定shell命令或脚本执行清理例程这个工具链。使用命令或脚本,可以调用系统命令的环境。默认值是空的。

数据类型是一个单元阵列的特征向量。每个字符向量是一个shell清理命令。

如果ToolchainInfo调用一个安装程序,您可以使用一组相应的清理例程恢复原来的系统环境设置。例如,如果一个安装程序添加环境变量和系统文件夹路径,您可以使用一个清理例程来删除它们。

例如:

> > h。ShellCleanup ans = [] > > h。ShellCleanup= 'call "cleanup_mssdk71.bat"'; >> h.ShellCleanup ans = 'call "cleanup_mssdk71.bat"'

下面的列表说明,这个属性适合的顺序操作:

  1. MATLAB的设置

  2. 壳安装

  3. Prebuild

  4. 构建(汇编程序、编译器、链接器、文档)

  5. Postbuild

    1. 下载

    2. 执行

  6. 壳清理

  7. MATLAB清理

添加一个自定义工具链不包括示例ShellCleanup财产。

属性:

GetAccess 公共
SetAccess 公共

Shell脚本设置工具链

指定执行安装程序特定shell命令或脚本工具链。使用命令或脚本,可以调用系统命令的环境。默认值是空的。

数据类型是一个单元阵列的特征向量。每个字符向量是一个shell命令设置。

如果ToolchainInfo调用一个安装程序,您可以使用一组相应的清理例程恢复原来的系统环境设置。例如,如果一个安装程序添加环境变量和系统文件夹路径,您可以使用一个清理例程来删除它们。

例如:

> > h。ShellSetup ans = [] > > h。ShellSetup= 'call "setup_mssdk71.bat"'; >> h.ShellSetup ans = 'call "setup_mssdk71.bat"'

intel_tc.m文件中添加一个自定义工具链使用下列命令行设置的值ShellSetup:

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %设置% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %以下我们使用% ICPP_COMPILER12%英特尔编译器作为根文件夹%安装。你可以设置一个环境变量或者给% compilervars完整路径。bat文件tc。ShellSetup{1} = 'call %ICPP_COMPILER12%\bin\compilervars.bat intel64';

这个例子,在MATLAB命令窗口中看到相应的属性值,输入:

h = intel_tc;h.ShellSetup
ans = ' % ICPP_COMPILER12% \ bin \ compilervars打电话。蝙蝠intel64”

下面的列表说明,这个属性适合的顺序操作:

  1. MATLAB的设置

  2. 壳安装

  3. Prebuild

  4. 构建(汇编程序、编译器、链接器、文档)

  5. Postbuild

    1. 下载

    2. 执行

  6. 壳清理

  7. MATLAB清理

属性:

GetAccess 公共
SetAccess 公共

创建BuildTool对象为特定语言

初始化ToolchainInfo创建BuildTool对象指定的语言或一组语言万博1manbetxSupportedLanguages

如果你不指定一个值万博1manbetxSupportedLanguages默认值是“C / c++”。这增加了BuildTool对象的C编译器和c++编译器BuildTool对象ToolchainInfo

覆盖默认值,使用一个名称-值对将指定一个值万博1manbetxSupportedLanguages当你初始化ToolchainInfo。例如:

h = coder.make.ToolchainInfo (“万博1manbetxSupportedLanguages”,“C”);
值可以是:“C”,“c++”,“C / c++”,“Asm / C”,“Asm / c++”,或“Asm / C / c++”

万博1manbetxSupportedLanguages房地产没有任何相关的方法。

添加一个自定义工具链不包括示例万博1manbetxSupportedLanguages财产。

属性:

GetAccess 公共
SetAccess 公共

版本的软件构建工具ToolchainInfo万博1manbetx支持。

默认值是空的。

数据类型是特征向量。

这个属性没有任何关联的方法。直接赋值万博1manbetxSupportedVersion

添加一个自定义工具链的价值万博1manbetxSupportedVersion被定义的intel_tc.m工具链定义文件:

tc。万博1manbetxSupportedVersion = ' 12.1 ';

这个例子,在MATLAB命令窗口中看到相应的属性值,输入:

h = intel_tc;h.万博1manbetxSupportedVersion
ans = 12.1

属性:

GetAccess 公共
SetAccess 公共

方法

addAttribute 添加自定义属性属性
addBuildConfiguration 添加构建配置
addBuildTool 添加BuildTool对象BuildTools
addIntrinsicMacros 添加内在宏
addMacro 添加宏
addPostDownloadTool 添加post-download工具PostDownloadTool
addPostExecuteTool 添加post-execute工具PostbuildTools
addPostbuildTool 添加postbuild工具PostbuildTools
addPrebuildTool 添加prebuild工具PrebuildTools
清理 运行清理命令
getAttribute 得到的值属性
getAttributes 得到属性名称的列表
getBuildConfiguration 为构建配置对象得到处理
getBuildTool 得到BuildTool对象
getMacro 得到宏观的价值
getPostbuildTool 得到postbuildBuildTool对象
getPrebuildTool 得到prebuildBuildTool对象
get万博1manbetxSupportedLanguages 得到支持的语言列表万博1manbetx
isAttribute 确定属性存在
removeAttribute 删除属性
removeBuildConfiguration 删除构建配置
removeBuildTool 删除BuildTool对象从BuildTools
removeIntrinsicMacros 消除内在的宏
removeMacro 把宏从
removePostbuildTool 删除postbuild构建工具
removePrebuildTool 删除prebuild构建工具
setBuildConfiguration 设置指定构建配置的价值
setBuildConfigurationOption 集构建配置的构建工具选项值
setBuildTool 分配BuildTool对象命名为构建工具BuildTools
setBuilderApplication 更新构建器的应用程序在特定平台上工作
setMacro 设置值的宏
setPostbuildTool 分配BuildTool对象PostbuildTool工具PostbuildTools
setPrebuildTool 分配BuildTool对象来命名PrebuildToolPrebuildTools
设置 调用指定的工具链设置命令MATLABSetup ShellSetup
验证 验证工具链
这个主题有帮助吗?