这个示例演示如何将两个不同生成的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文件解压缩到生成目录或生成环境中的文件夹中。还必须使可执行文件可以访问动态库,例如,将生成的动态库移动到与可执行文件相同的文件夹中。
作为手动编写主文件的替代方法,您还可以使用塞瓦尔编码员
功能塞瓦尔编码员
函数使您能够从生成的C/C++代码调用外部C/C++代码。
档案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函数在MATLAB环境中测试生成的代码。MEX函数必须能够访问生成的链接库。将链接库移动到当前目录并调用MEX函数。
复制文件([“projectMoon/getGravityConstMoon”dllext]);复制文件([“projectEarth/getGravityConstEarth”dllext]);[t_m,t_e]=planetSim_mex
t_m=3.5136
t_e=1.4278
输出显示了坠落物体在月球和地球上的飞行时间。
coder.config
|编码基因
|编码员
|塞瓦尔编码员
|帕克恩戈
|coder.CodeConfig