主要内容

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

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

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

为MATLAB®算法生成C ++代码

考虑一个简单的matlab函数,返回引力常数。重力常量的值来自全局变量。

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

假设您要生成代码getGrivityConst.模型为月球和地球的场景。使用相同的入口点函数生成两个单独的代码项目。为每个项目指定不同的全局值,因此,引力常量。

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

  • DLL构建类型。

  • C ++目标语言。

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

  • #pragma一次风格#包括守卫。

  • 将生成的代码文件包装到a中。压缩通过致电文件Packngo.功能。

cfg = coder.config('DLL');cfg.targetlang =“c ++”;cfg.cppnamespace ='月亮';cfg.headerguardstyle =“usepragmaonce”;cfg.postcodegencenmand =.'packngo(buildinfo)';

生成代码getGrivityConst.模拟月亮:

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

  • 使用代码生成报告。

  • 这样的代码以M / S ^ 2为单位返回月亮的重力常数的值。

  • 在调用的输出文件夹中projectmoon.

  • 使用输出二进制文件getgravityConstmoon.

Codegen.getGrivityConst.-Config.CFG.-报告- 玻璃{'g',-1.62}......-D.projectmoon.-OgetgravityConstmoon.
代码成功:要查看报告,请打开('projectmoon / html / eport.mldatx')。

生成代码getGrivityConst.模型地球,首先修改:

  • 命名空间名称

  • 引力常数

  • 输出文件名称

  • 输出文件夹名称

cfg = coder.config('DLL');cfg.targetlang =“c ++”;cfg.cppnamespace ='地球';cfg.headerguardstyle =“usepragmaonce”;cfg.postcodegencenmand =.'packngo(buildinfo)';Codegen.getGrivityConst.-Config.CFG.-报告- 玻璃{'g',-9.81}......-D.Projectearth.-OgetgravityConstearth.
代码生成成功:要查看报告,请打开('projectearth / html / eport.mldatx')。

项目集成方案:行星建模

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

确定依赖于平台的文件扩展

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

dllext ='';libext =.'';如果ISMAC DLLEXT =.'.dylib';libext = dllext;eleesifisunix dllext ='。所以';libext = dllext;eleesifispc dllext ='.dll';libext =.'.lib';别的DISP('不支持平台'金宝app返回结尾

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

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

有关如何编写使用生成的两个项目的C ++代码的主文件的示例,请参阅附件main_planetsim.cpp.。要在主文件中构建可执行文件或二进制文件,必须指定或提供以下内容(编译器,链接器和/或IDE)以及它们的正确路径:

  • 任何名为函数的头文件。

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

  • 动态库(.dll.。所以。丁基文件)。

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

。压缩文件的文件Packngo.命令在代码生成期间创建包含生成的代码文件。将zip文件解压缩到构建目录或构建环境中的文件夹。您还必须通过将生成的动态库移动到同一文件夹作为可执行文件来使您的动态库可用于可执行文件。

编写一个Matlab函数,集成了两个项目

作为手工编写主文件的替代方案,您还可以使用该项目将两个项目集成到第三个生成的代码项目中编码器.CEVAL.功能。这编码器.CEVAL.功能使您可以从生成的C / C ++代码调用外部C / C ++代码。

文件Planetsim.m.展示如何使用编码器.CEVAL.和关联的构建配置功能将生成的项目集成到较大的项目中。

<包括> Planetsim.m

为此生成MEX代码Planetsim功能:

linkobjectmoon = ['projectmoon / getgravityconstmoon'libext];linkobjectearth = ['projectearth / getgravityconstearth'libext];cfg = coder.config('mex');cfg.targetlang =“c ++”;Codegen('Planetsim''-config',cfg,'-d''Planetsim''-报告',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.

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

也可以看看

|||||

相关话题