主要内容

选择并配置C或c++编译器

构建过程需要一个受支持的编译器。金宝app编译器,在这里指的是包含链接器和make实用程序以及高级语言编译器的开发环境。有关支持的编译器版本的详细信息金宝app,请参见:

在创建可执行程序时,构建过程必须能够访问受支持的编译器。金宝app构建过程可以根据默认MEX找到要使用的编译器编译器。

构建过程还需要选择工具链或模板生成文件。工具链或模板生成文件决定在构建的make阶段运行哪个编译器。有关更多信息,请参见配置工具链(ToolchainInfo)或模板制作文件生成过程

若要确定哪些模板生成文件可用于编译器和系统目标文件,请参见比较不同产品对系统目标文件的支持下载188bet金宝搏金宝app

对于生成的文件和用户提供的文件,文件扩展名为. c. cpp,确定构建过程是使用C编译器还是c++编译器。如果文件扩展名为. c,构建过程使用C编译器编译文件,符号使用C链接约定。如果文件扩展名为. cpp,构建过程使用c++编译器编译文件,符号使用c++链接规范。

遵守语言标准

代码生成器生成符合以下标准的代码:

语言 金宝app支持标准 其他的名字
C

ISO®/ IEC 9899:1990

C89 /人私下偷偷收藏盒式

ISO / IEC 9899:1999

C99

c++

ISO / IEC 14882:2003

c++ 03

ISO / IEC 14882:2011

c++ 11

代码生成器从这些源生成的代码就是ANSI®C / c++兼容:

  • 金宝app®内置块算法代码

  • 生成的系统级代码(任务ID [TID]检查、管理、功能等)

  • 来自其他块集的代码,包括定点设计器™产品和通信工具箱™产品

  • 来自其他代码生成器的代码,例如MATLAB®功能

此外,代码生成器可以合并以下代码:

  • 嵌入式系统目标文件(例如,启动代码、设备驱动程序块)

  • 自定义s函数或TLC文件

请注意

这两个源的编码标准超出了代码生成器的控制范围。这些标准可能是合规性问题的根源,例如使用C99特性的代码金宝appANSI C, C89/C90子集。

编程语言注意事项

代码生成器生成C和c++代码。在选择编程语言时考虑以下几点:

  • 您的项目是否要求您配置代码生成器以使用特定的编译器?在Windows上生成C/ c++代码®需要进行此选择。

  • 您的项目是否需要更改模型的默认语言配置设置?看到选择C或c++编程语言

  • 您的项目是否需要将遗留代码或自定义代码与生成的代码集成?有关集成选项的摘要,请参见选择一个外部代码集成工作流(嵌入式编码)

  • 您的项目是否需要集成C和c++代码?如果有,请参见选择一个外部代码集成工作流(嵌入式编码)

    请注意

    在将生成的代码与自定义代码集成时,可以混合使用C和c++代码。但是,您必须了解C和默认c++链接约定之间的差异,并添加外来的“C”'链接说明符。有关不同的链接约定以及如何应用的详细信息外来的“C”,请参考c++编程语言工具书。

  • 您的项目是否需要其他产品的代码生成支持?下载188bet金宝搏金宝app看到c++语言支持限制金宝app

用于使用Stateflow的c++代码生成示例®,请参阅sfcndemo_cppcount模型或sf_cpp模型。

c++语言支持限制金宝app

要使用c++语言支持,您可能需要配置代码金宝app生成器以使用特定的编译器。例如,如果Microsoft上没有安金宝app装受支持的编译器®Windows计算机,默认编译器是低成本航空C编译器随MATLAB产品发货。此编译器不支持c++。金宝app如果在指定用于代码生成的c++之前,未将代码生成器配置为使用c++编译器,则软件将生成一条错误消息。

对c++支持的代码生成器限制包括:金宝app

  • 以下代码生成器不支持c++代码生成:金宝app

    Simscape™动力传动系统™
    Simscape多体™第一代(Simscape多体支持第二代)金宝app
    Simscape电气™电力系统
    金宝app仿真软件实时™
  • 对于ERT和基于ERT的系统目标文件代码接口打包设置为那种一次性的功能时,以下字段目前不支持金宝app. cpp扩展。

    • 数据定义文件名

    • 定义文件对象的对象金宝app仿真软件。信号金宝app仿真软件。参数类或它们的子类。

    属性指定文件名. c扩展或不带扩展并指定c++为代码生成语言,代码生成器将生成一个. cpp文件。

代码生成器假设有符号整数溢出的自动换行

代码生成器通过假设有符号整数C操作在溢出时自动换行来减少内存使用并增强生成的代码执行。当算术运算的结果超出输出数据类型可以表示的值范围时,会发生有符号整数溢出。C编程语言没有定义这些操作的结果。一些C编译器以牺牲溢出条件为代价,积极地优化范围内值的signed操作。其他编译器保留溢出时自动换行的行为。例如,gcc和MinGW编译器提供了一个选项,可以对有符号整数溢出进行可靠的溢出包装。为模型生成的程序映像可能产生不同于模型模拟结果的结果,因为溢出的处理不同,这取决于您的编译器。

在生成代码时,如果使用受支持的编译器以及由代码生成器配置的默认选项,编译器金宝app将保留完全溢出自动换行行为。如果更改编译器选项或在另一个开发环境中编译代码,则编译器可能不会保留完全的溢位自动换行行为。在这种情况下,可执行程序可能产生不可预测的结果。

如果您的应用程序关注这个问题,请考虑以下一个或多个操作:

  • 验证编译后的代码是否产生预期的结果。

  • 如果编译器可以强制包装行为,请打开它。例如,对于gcc编译器或基于gcc的编译器(如MinGW),配置构建过程以使用编译器选项-fwrapv

  • 选择对整数溢出进行包装的编译器。

  • 如果已经安装了Embedded Coder,请开发并应用自定义代码替换库来替换为有符号整数生成的代码。有关更多信息,请参见代码替换定制(嵌入式编码)

选择并配置编译器

要查看已安装的编译器并选择默认编译器,在命令窗口中键入:

墨西哥人设置

在Windows计算机上,您可以安装金宝app支持编译器并选择默认编译器。

UNIX环境下®平台,默认编译器是GNU®gcc / g + +用于GNU或XcodeMac

除非构建方法配置选择了特定的编译器,否则代码生成器将使用默认编译器进行构建过程。

首先,指定的系统目标文件确定代码生成器需要的编译器:

  • 如果选择基于工具链的系统目标文件,例如grt.tlc(通用实时目标),ert.tlc(嵌入式编码器®),或autosar.tlc(嵌入式编码器的AUTOSAR),该构建过程子窗格显示构建过程的配置参数。使用工具链配置参数,为您的模型构建选择编译器和相关工具。要验证所选工具链,请单击验证工具链

  • 如果选择基于模板makefile (TMF)的系统目标文件,例如rsim.tlc,构建过程子窗格显示用于配置生成过程的模板生成文件参数。的模板makefile参数显示所选系统目标文件的默认TMF文件。如果系统目标文件支持特定于编译器的模板生成文件(例如金宝app,快速模拟或S-Function系统目标文件),则可以设置模板makefile到特定于编译器的TMF。有关有效的TMF名称,请参见比较不同产品对系统目标文件的支持下载188bet金宝搏金宝app

如果生成的代码超过2 Gb静态内存限制,则会发生编译器错误。解决此问题:

  • 对于基于grt的系统目标文件,设置模型配置参数代码接口打包可重用的功能

  • 对于基于ert的系统目标文件,设置模型配置参数代码接口打包可重用的功能选择参数对模型初始化使用动态内存分配

包括s -函数源代码

当代码生成器使用s -函数构建模型时,s -函数的源代码可以在当前文件夹中,也可以在与其mexico文件相同的文件夹中。当代码生成器发现一个名为sfncname. h和S-function mexo文件放在同一个文件夹中。此文件夹必须在MATLAB路径上。

类似地,代码生成器在找到文件时为文件夹添加规则sfncname. c(或. cpp),与S-function mexo文件所在的文件夹相同。

相关的话题

外部网站