主要内容

集成多个生成的C++代码项目

这个示例演示如何将两个不同生成的C++代码项目集成到一个更大的项目中。

生成的代码项目可能具有类似的函数名称,但具有不同的设置、参数或功能。使用命名空间生成代码,以帮助集成共享相同名称的不同项目。命名空间还可以提高代码的可读性。

生成一个Matlab®算法的C++代码

考虑一个简单的MATLAB函数,它返回一个引力常数。引力常数的值是由一个全局变量导出的。

类型getGravityConst.m
函数c=getGravityConst%#codegen全局g c=g;

假设您要为生成代码getGravityConst这模拟了月球和地球的情况。使用相同的入口点函数生成两个独立的代码项目。为每个项目指定不同的全局值,从而指定重力常数。

创建代码生成配置对象。指定:

  • DLL生成类型。

  • C++目标语言。

  • 作为命名空间的轨道体的名称。

  • #布拉格语一次风格#包括警卫。

  • 将生成的代码文件打包到拉链通过调用帕克恩戈作用

cfg=coder.config(“dll”);cfg.TargetLang=“C++”;cfg.cpp名称空间=“月亮”;cfg.HeaderGuardStyle=“使用PragmaOnce”;cfg.PostCodeGenCommand=“packNGo(buildInfo)”;

为生成代码getGravityConst为月球建模:

  • 通过使用先前定义的配置对象。

  • 带有代码生成报告。

  • 这样,代码以m/s^2为单位返回月球引力常数的值。

  • 在名为投影月亮.

  • 使用名为getGravityConstMoon.

编码基因getGravityConst-配置cfg-报告-全球的{'g',-1.62}...-d投影月亮-ogetGravityConstMoon
代码生成成功:要查看报告,请打开('projectMoon/html/report.mldatx')

为生成代码getGravityConst要对地球建模,请首先修改:

  • 名称空间名称

  • 引力常数

  • 输出文件名

  • 输出文件夹名称

cfg=coder.config(“dll”);cfg.TargetLang=“C++”;cfg.cpp名称空间=“地球”;cfg.HeaderGuardStyle=“使用PragmaOnce”;cfg.PostCodeGenCommand=“packNGo(buildInfo)”;codegengetGravityConst-配置cfg-报告-全球的{'g',-9.81}...-d投影地球-ogetGravityConstEarth
代码生成成功:要查看报告,请打开('projectEarth/html/report.mldatx')

项目集成场景:行星建模

假设您希望设计一个更大的项目,该项目执行行星建模并计算数量,如下落物体的飞行时间。飞行时间取决于每个行星的引力常数和物体的初始高度。您希望使用生成的代码函数getGravityConst在这个更大的项目中。

确定与平台相关的文件扩展名

生成的动态库在不同的平台上具有不同的扩展。此代码为您的平台确定正确的扩展。

德莱克斯特='';libext='';如果伊斯马克·德莱克斯特=“.dylib”;libext=dllext;埃尔塞夫iUnix dllext='所以';libext=dllext;埃尔塞夫ispc dllext=“.dll”;libext=“.lib”;其他的disp(“不支持平台”万博1manbetx)回来终止

编写一个使用生成的代码项目的主文件

在一般情况下,您可以通过编写或修改主文件来集成不同的项目,以调用每个项目的函数。通过使用名称空间,您可以区分为每个项目生成的函数,即使函数名称相同。

有关如何使用生成的C++代码为两个项目编写主文件的示例,请参见附加文件。主平面图。若要从主文件生成可执行文件或二进制文件,必须指定或提供以下生成工具(编译器、链接器和/或IDE)及其正确路径:

  • 任何调用函数的头文件。

  • 在Windows平台上,导入库(lib先生文件)。

  • 动态库(.dll,所以迪利布先生文件)。

  • 包含其他生成源的目录和包含文件。

这个拉链文件帕克恩戈在代码生成期间创建的命令包含生成的代码文件。将zip文件解压缩到生成目录或生成环境中的文件夹中。还必须使可执行文件可以访问动态库,例如,将生成的动态库移动到与可执行文件相同的文件夹中。

编写一个集成这两个项目的MATLAB函数

作为手动编写主文件的替代方法,您还可以使用塞瓦尔编码员功能塞瓦尔编码员函数使您能够从生成的C/C++代码调用外部C/C++代码。

档案planetSim.m演示如何使用塞瓦尔编码员以及相关的构建配置功能,以将生成的项目集成到更大的项目中。

planetSim.m

为应用程序生成MEX代码刨床功能:

linkObjectMoon=[“projectMoon/getGravityConstMoon”libext];linkObjectEarth=[“projectEarth/getGravityConstEarth”libext];cfg=coder.config(“墨西哥”);cfg.TargetLang=“C++”;codegen(“刨床”,“-config”,cfg,“-d”,“刨床”,“-报告”,linkObjectMoon,linkObjectEarth)
代码生成成功:要查看报告,请打开('planetSim/html/report.mldatx')

测试生成的MEX函数

使用MEX函数在MATLAB环境中测试生成的代码。MEX函数必须能够访问生成的链接库。将链接库移动到当前目录并调用MEX函数。

复制文件([“projectMoon/getGravityConstMoon”dllext]);复制文件([“projectEarth/getGravityConstEarth”dllext]);[t_m,t_e]=planetSim_mex
t_m=3.5136
t_e=1.4278

输出显示了坠落物体在月球和地球上的飞行时间。

另见

|||||

相关话题