集成多个生成的c++代码项目
这个例子展示了如何将两个不同生成的c++代码项目集成到单个更大的项目中。
生成的代码项目可能具有类似的函数名称,但具有不同的设置、参数或功能。生成带有名称空间的代码,以帮助集成具有相同名称的不同项目。名称空间还可以提高代码的可读性。
生成MATLAB算法的c++代码
考虑一个返回引力常数的简单MATLAB函数。引力常数的值是由一个全局变量推导出来的。
类型getGravityConst.m
函数c = getGravityConst %#codegen global g;
假设您想为getGravityConst
模拟了月球和地球的情况。使用相同的入口点函数生成两个独立的代码项目。为每个项目指定不同的全局值,也就是重力常数。
创建一个代码生成配置对象。指定:
DLL构建类型。
c++目标语言。
轨道体的名称作为命名空间。
# pragma一旦
风格# include
警卫。将生成的代码文件打包到
. zip
通过调用packNGo
函数。
CFG = code .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 = code .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 (“不支持平台”)返回结束
编写一个使用生成的代码项目的主文件
在一般情况下,您通过编写或修改一个主文件来调用每个项目的函数,从而集成不同的项目。通过使用名称空间,您可以为每个项目区分生成的函数,即使函数名是相同的。
有关如何编写使用为两个项目生成的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 < /包括>
的生成MEX代码planetSim
功能:
linkObjectMoon = [“projectMoon / getGravityConstMoon”libext];linkObjectEarth = [“projectEarth / getGravityConstEarth”libext];CFG = code .config(墨西哥人的);cfg。TargetLang =“c++”;codegen (“planetSim”,“配置”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
输出显示了物体在月球和地球上的飞行时间。
另请参阅
coder.config
|codegen
|coder.cinclude
|coder.ceval
|packNGo
|编码器。CodeConfig