这个例子展示了如何从MATLAB生成一个C可执行文件®使用MATLAB编码器™在本例中,为生成随机标量值的MATLAB函数生成可执行文件。使用该应用程序,你:
生成一个例子主要
调用生成的库函数的函数。
复制并修改生成的c
而且main.h
.
修改项目设置,以便应用程序可以找到修改c
而且main.h
.
生成可执行文件。
创建入口点函数
在本地可写文件夹中,创建一个MATLAB函数,coderand
,由开区间(0,1)上的标准均匀分布生成一个随机标量值:
函数R = coderand()% # codegenR = rand();
创建测试文件
在同一个本地可写文件夹中,创建一个MATLAB文件,coderand_test.m
,那就叫coderand
.
函数Y = coderand_test();
打开MATLAB编码器应用程序
在MATLAB工具条上应用程序选项卡,在代码生成,按MATLAB编码器应用程序图标。
应用程序打开选择源文件页面。
指定源文件
在选择源文件页,键入或选择入口点函数的名称coderand
.
应用程序用默认名称创建一个项目coderand.prj
在当前文件夹中。
点击下一个去定义输入类型的一步。该应用程序分析了编码问题和代码生成准备的功能。如果应用程序发现问题,它会打开检查代码生成准备情况页,您可以在此查看和修复问题。在本例中,因为应用程序没有检测到问题,所以它会打开定义输入类型页面。
定义输入类型
因为C语言使用静态类型,在编译时,MATLAB编码器必须在MATLAB文件中确定所有变量的属性。必须指定所有入口点函数输入的属性。根据入口点函数输入的性质,MATLAB编码器可以在MATLAB文件中推断出所有变量的属性。
在这个例子中,函数coderand
没有输入。
点击下一个去检查运行时问题的一步。
检查运行时问题
的检查运行时问题步骤从入口点函数生成一个MEX文件,运行MEX函数,并报告问题。该步骤是可选的。但是,执行此步骤是最佳实践。您可以检测并修复在生成的C代码中难以诊断的运行时错误。
打开检查运行时问题对话框中,单击检查问题箭头.
选择或输入测试文件coderand_test
.
点击检查问题.
该应用程序生成一个MEX函数coderand
.它运行替换调用的测试文件coderand
对MEX函数的调用。如果应用程序在生成或执行MEX函数期间检测到问题,它会提供警告和错误消息。单击这些消息可导航到有问题的代码并修复问题。在本例中,应用程序没有检测到问题。
点击下一个去生成代码的一步。
生成一个C主要
函数
在生成可执行文件时,必须提供C/ c++ main函数。默认情况下,当你生成C/ c++源代码、静态库、动态链接库或可执行文件时,MATLAB编码器生成一个主要
函数。生成的main函数是为应用程序修改的模板。看到使用示例Main函数合并生成的代码.复制和修改生成的main函数后,可以使用它生成C/ c++可执行文件。或者,您也可以编写自己的main函数。
在生成可执行文件之前coderand
,生成主要
调用的函数coderand
.
打开生成对话框中,单击生成箭头.
在生成对话框,设置构建类型来源代码
而且语言其他项目生成配置设置使用默认值。
点击更多的设置.
在所有设置选项卡,在先进的验证一下生成示例main设置为生成,但不编译,一个示例主函数
.点击关闭.
点击生成.
MATLAB编码器生成一个c
文件和main.h
文件。应用程序提示代码生成成功。
点击下一个打开完成工作流程页面。
在完成工作流程页面,在生成的输出大家可以看到c
在子文件夹中coderand \ codegen \ lib \ coderand \例子
.
复制生成的示例主文件
因为后续的代码生成可以覆盖生成的示例文件,所以在修改这些文件之前,请将它们复制到codegen
文件夹中。对于本例,复制c
而且main.h
从子文件夹coderand \ codegen \ lib \ coderand \例子
到一个可写文件夹,例如,c: \ myfile
.
修改生成的样例主文件
在包含示例主文件副本的文件夹中,打开c
.
修改c
这样它就输出了a的结果coderand
电话:
在main_coderand
,删除该行
双r;
在main_coderand
、替换
R = coderand()
printf (" coderand = % g \ n”,coderand ());
在这个例子中,主要
没有参数。在主要
,删除如下行:
命令行参数个数(无效);(空白)argv;
改变定义主要
来
int main ()
开放main.h
修改main.h
:
添加的头
到包含文件:
# include < stdio . h >
将main的声明改为
external int main()
生成可执行文件
打开生成代码页,展开工作流步骤并点击生成
打开生成对话框中,单击生成箭头.
集构建类型来可执行文件(. exe)
.
点击更多的设置.
在自定义代码选项卡,在其他源文件,输入c
在自定义代码选项卡,在其他包含目录,输入修改后的位置c
而且main.h
文件。例如,c: \ myfile
.点击关闭.
要生成可执行文件,单击生成.
应用程序提示代码生成成功。
点击下一个去完成工作流程的一步。
下生成的输出,您可以看到生成的可执行文件的位置coderand.exe
.
运行可执行文件
在Windows上运行MATLAB中的可执行文件®平台:
系统(“coderand”)
在本例中,创建一个生成随机标量值的MATLAB函数和一个调用该MATLAB函数的主C函数。然后为函数输入参数指定类型,指定主函数,并为MATLAB代码生成C可执行文件。
写一个MATLAB函数,coderand
,由开区间(0,1)上的标准均匀分布生成一个随机标量值:
函数R = coderand()% # codegenR = rand();
写一个主C函数,c: \ myfile \ c
,那就叫coderand
.例如:
/* * main.c */ #include#include #include "coderand.h" #include "coderand_terminate.h" int main(){/*初始化函数从生成的入口点函数自动调用。因此,这里不包括初始化调用。*/ printf("coderand=%g\n", coderand());coderand_terminate ();返回0;}
请注意
在本例中,因为默认的文件分区方法是为每个MATLAB文件生成一个文件,所以包含“coderand_terminate.h”
.如果您的文件分区方法被设置为为所有函数生成一个文件,那么就这样做不包括“coderand_terminate.h”
.
配置你的代码生成参数,包括主C函数,然后生成C可执行文件:
CFG = code .config('exe');cfg。CustomSource = 'main.c';cfg。CustomInclude = 'c:\myfiles';CFG编码器
codegen
生成一个C可执行文件,coderand.exe
,在当前文件夹中。它会在默认文件夹中生成支持金宝app文件,codegen / exe / coderand
.codegen
的最小集# include
所选代码替换库所需的头文件的语句。
生成可执行文件时,必须提供主要
函数。对于C可执行文件,提供一个C文件,c
.对于c++可执行文件,提供一个c++文件,main.cpp
.验证包含main函数的文件夹只有一个主文件。否则,c
优先于main.cpp
,这会在生成c++代码时导致错误。您可以从项目设置对话框、命令行或代码生成对话框中指定主文件。
默认情况下,当你生成C/ c++源代码、静态库、动态链接库或可执行文件时,MATLAB编码器生成一个主要
函数。生成的main函数是为应用程序修改的模板。看到使用示例Main函数合并生成的代码.复制和修改生成的main函数后,可以使用它生成C/ c++可执行文件。或者,您也可以编写自己的main函数。
当您将MATLAB函数转换为C/ c++库函数或C/ c++可执行文件时,MATLAB编码器生成初始化函数和终止函数。
如果您的文件分区方法设置为为每个MATLAB文件生成一个文件,则必须在c
.否则,不要把它包括在内c
.
有关调用initialize和terminate函数的详细信息,请参见使用生成的初始化和终止函数.
打开生成对话框中的生成代码页,单击生成箭头.
点击更多的设置.
在自定义代码选项卡,设置:
其他源文件的C/ c++源文件的名称主要
函数。例如,c
.有关更多信息,请参见为C/ c++可执行文件指定主函数.
其他包含目录到c
.例如,c: \ myfile
.
设置CustomSource
而且CustomInclude
代码生成配置对象的属性(参见使用配置对象).的CustomInclude
属性指定的C/ c++文件的位置CustomSource
.
为可执行文件创建一个配置对象:
CFG = code .config('exe');
设置CustomSource
属性设置为C/ c++源文件的名称主要
函数。(有关更多信息,请参见为C/ c++可执行文件指定主函数)。例如:
cfg。CustomSource = 'main.c';
设置CustomInclude
属性的位置c
.例如:
cfg。CustomInclude = 'c:\myfiles';
使用命令行选项生成C/ c++可执行文件。例如,如果myFunction
接受一个类型的输入参数双
:
codegen -config cfg myMFunction -args{0} .使用实例
MATLAB编码器编译主函数并将其与生成主函数的C/ c++代码链接myMFunction.m
.