此示例显示如何将两个不同生成的C ++代码项目集成到一个更大的项目中。
您所生成的代码项目可能具有相似的函数名称,但具有不同的设置,参数或功能。使用名称空间生成代码,以帮助集成共享相同名称的不同项目。命名空间还可以提高代码可读性。
考虑一个简单的MATLAB函数,它返回一个引力常数。引力常数的值是由一个全局变量导出的。
类型getGravityConst.m
函数c = getgravityconst%#codegen global 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}...-D.projectMoon-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}...-D.projectEarth-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)指定或提供以下方式:
任何被调用函数的头文件。
在视窗平台上,导入库(.lib.
文件)。
动态库(.dll.
,所以
和. dylib
文件)。
包括其他生成的源的目录,并包含文件。
的. zip
文件,packNGo
在代码生成期间创建的命令包含生成的代码文件。将zip文件解压缩到构建目录或构建环境中的文件夹中。您还必须使可执行文件可以访问动态库,例如,通过将生成的动态库移动到与可执行文件相同的文件夹中。
作为手工编写主文件的替代方案,您还可以使用备份将两个项目集成到第三个生成的代码项目中Coder.CEVAL.
函数。的Coder.CEVAL.
函数使您能够从生成的C/ c++代码调用外部C/ c++代码。
该文件Planetsim.M.M.
演示如何使用Coder.CEVAL.
以及相关的构建配置功能,以将生成的项目集成到更大的项目中。
<包括> Planetsim.m 包括>
的MEX代码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')
使用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
|codegen
|coder.cinclude
|Coder.CEVAL.
|packNGo
|Coder.codeConfig