主要内容

集成多个生成c++代码项目

这个例子展示了如何将两种不同的生成c++代码集成到一个单一的项目,大项目。

生成的代码项目可能有类似的函数名,但是有不同的设置,参数,或功能。生成代码与名称空间来帮助整合不同的项目,共享相同的名称。名称空间还可以提高代码的可读性。

为MATLAB®生成c++代码的算法

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

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

假设您想生成代码getGravityConst这对月球和地球模型场景。生成两个不同的代码项目相同的入口点函数。指定一个不同的全球价值,因此,引力常数,为每个项目。

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

  • DLL建造类型。

  • c++目标语言。

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

  • # pragma一旦风格# include警卫。

  • 生成的代码文件打包成一个. zip文件通过调用packNGo函数。

cfg = coder.config (“dll”);cfg。TargetLang =“c++”;cfg。CppNamespace =“月亮”;cfg。HeaderGuardStyle =“UsePragmaOnce”;cfg。PostCodeGenCommand =“packNGo (buildInfo)”;

生成的代码getGravityConst月球模型:

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

  • 用一个代码生成报告。

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

  • 在输出文件夹中projectMoon

  • 与输出二进制文件名为getGravityConstMoon

codegengetGravityConst配置cfg报告全局变量{‘g’, -1.62}- dprojectMoon- ogetGravityConstMoon
代码生成成功:查看报告,打开(“projectMoon / html / report.mldatx”)

生成的代码getGravityConst地球模型,首先修改:

  • 名称空间的名字

  • 引力常数

  • 输出文件的名字

  • 输出文件夹名称

cfg = coder.config (“dll”);cfg。TargetLang =“c++”;cfg。CppNamespace =“地球”;cfg。HeaderGuardStyle =“UsePragmaOnce”;cfg。PostCodeGenCommand =“packNGo (buildInfo)”;codegengetGravityConst配置cfg报告全局变量{‘g’, -9.81}- dprojectEarth- ogetGravityConstEarth
代码生成成功:查看报告,打开(“projectEarth / html / report.mldatx”)

项目集成场景:行星建模

假设您想要设计一个更大的项目执行行星建模和计算量下降的飞行时间等对象。飞行时间取决于每个行星的引力常数和初始对象的高度。你想使用生成的代码的功能getGravityConst在这个大的项目。

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

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

dllext =;libext =;如果ismac dllext =' . dylib ';libext = dllext;elseifisunix dllext =“所以”;libext = dllext;elseifispc dllext =. dll”;libext =“lib”;其他的disp (平台不支持的金宝app)返回结束

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

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

对于如何编写一个主文件的一个例子,使用的c++代码生成项目,见附件main_planetSim.cpp。建立一个可执行文件或二进制从主文件,您必须指定或提供以下构建工具(编译器、链接器和/或IDE)和正确的路径:

  • 头文件被调用函数。

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

  • 动态库(. dll,所以. dylib文件)。

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

. zip文件,packNGo在代码生成命令创建包含生成的代码文件。解压zip文件文件夹在您的构建目录中或构建环境。你必须使你的动态库访问可执行文件,例如,通过生成的动态库移动到同一文件夹可执行文件。

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

代替手工编写一个主文件,您还可以将两个项目集成到第三个项目通过使用生成的代码coder.ceval函数。的coder.ceval功能使您能够调用外部C / c++代码生成的C / c++代码。

该文件planetSim.m展示了如何使用coder.ceval和相关的构建配置功能将生成的项目整合到更大的项目。

<包括> planetSim.m < /包括>

生成代码的墨西哥人planetSim功能:

linkObjectMoon = [“projectMoon / getGravityConstMoon”libext];linkObjectEarth = [“projectEarth / getGravityConstEarth”libext];cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;codegen (“planetSim”,“配置”cfg,“- d”,“planetSim”,“报告”、linkObjectMoon linkObjectEarth)
代码生成成功:查看报告,打开(“planetSim / html / report.mldatx”)

测试生成的墨西哥人的功能

使用墨西哥人功能测试在MATLAB环境中生成的代码。墨西哥人函数必须能够访问生成的链接库。链接库移到当前目录和墨西哥人的函数调用。

拷贝文件([“projectMoon / getGravityConstMoon”dllext]);拷贝文件([“projectEarth / getGravityConstEarth”dllext]);[t_m、t_e] = planetSim_mex
t_m = 3.5136
t_e = 1.4278

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

另请参阅

|||||

相关的话题