j0r*_*rre 17 matlab mex visual-studio
我有一个包含函数库的Visual Studio 2010解决方案,我希望能够将MATLAB用作此库的几个可能的前端之一.因此,我希望Visual Studio在构建解决方案时自动生成一个mex文件,而不必将所有构建选项和路径导出到mexopts.bat并打开MATLAB从那里构建文件.我已经看到了几个类似的建议,例如在这些帖子中:
Matlab 7.1+和Visual Studio 2005
如何使用CMake和Visual Studio 2010(64位)构建MATLAB R2011a(64位)mex文件?
但是,它们看起来有点过时(引用不再存在的文件)或使用外部工具(例如CMake).有没有人知道如何在Visual Studio(2010及更新版本)中设置一个新项目(在现有解决方案中),该项目将为当代MATLAB版本构建一个mex文件?
j0r*_*rre 28
在对问题中提到的此页面的指导进行一些实验之后,似乎从一个空的C++项目开始,项目的属性页中的以下设置对于从Visual Studio 2010构建工作的.mexw64是必要且足够的:
Configuration properties -> General:
Set Target Extension to .mexw64
Set Configuration Type to Dynamic Library (.dll)
Configureation poperties -> VC++ Directories:
Add $(MATLAB_ROOT)\extern\include; to Include Directories
Configuration properties -> Linker -> General:
Add $(MATLAB_ROOT)\extern\lib\win64\microsoft; to Additional Library Directories
Configuration properties -> Linker -> Input:
Add libmx.lib;libmex.lib;libmat.lib; to Additional Dependencies
Configuration properties -> Linker -> Command Line:
Add /export:mexFunction to Additional Options
$(MATLAB_ROOT)是Matlab的根文件夹的路径,例如.C:\ Program Files\MATLAB\R2013a.
到目前为止,这只是从一个从头开始创建的解决方案尝试,并为Matlab 2013a 64位构建.我假设要为32位构建只需要将两次出现的更改为64到32.当我确认这适用于现有解决方案时,我将更新帖子.
编辑:正如预期的那样,这适用于添加到现有解决方案的项目.请记住将新项目设置为依赖于创建库的项目.
编辑2:根据这个问题,我可以确认上述步骤也适用于Visual Studio 2012,2013和2017.
cha*_*pjc 12
使用属性表快速为MEX文件设置Visual Studio项目
所有设置都可以通过属性表应用,这是一种快速应用Visual Studio项目配置的机制.
脚步:
MATLAB_ROOT用于64位MATLAB安装,以及MATLAB32_ROOT任何32位MATLAB安装(例如C:\Program Files\MATLAB\R2014b\).此文件夹具有子目录bin,extern,sys等.如果已打开,请重新启动VS.

而已!
请记住,当在MATLAB之间使用MEX文件和Visual Studio构建新版本时,需要运行一个clear mex或clear specificMEXFileName能够覆盖它.我用这种方式构建了几乎所有的MEX文件.
更新(2015年5月22日):文件MATLAB.props现在支持使用mxGPUArray对象的并行计算工具箱.如果您的计算机上存在工具箱路径和库(gpu.lib),则可以使用它们.只需包含CUDA SDK"构建自定义"(如果已安装CUDA SDK并安装了Visual Studio集成,则应安装)以包含cuda_runtime.h等.最后,链接cudart_static.lib(但保留Inherit .. .检查或您将收到其他链接器错误).
物业单细节
属性表中只有几个重要设置:
$(MATLAB_ROOT)\extern\include到AdditionalIncludeDirectories路径(使用父配置的继承路径) - mex.h的位置.$(MATLAB_ROOT)\extern\lib\win64\microsoft到AdditionalLibraryDirectories路径 - libmex.lib的位置等.libut.lib;libmx.lib;libmex.lib;libmat.lib.mexFunction(它是一个共享库)/EXPORT:mexFunction..mexw64对于x64).没有必要,但它还指定了一个未嵌入库中的输出清单,设置MATLAB_MEX_FILE并开启分析所需的数据生成.
为了完整起见,请注意项目配置有一个更正式的" 构建配置 "系统,其中包含一个属性表,但是松散的属性表足以设置一个简单的MEX项目.
关于 -largeArrayDims
该-largeArrayDims选项是mex在MATLAB中切换到命令,仅指示不定义 MX_COMPAT_32.因此,在Visual Studio中,您不必执行任何操作,因为默认情况下未定义此操作.如果您想要相反的行为(-compatibleArrayDims),那么MX_COMPAT_32在预处理器部分中定义.
什么是libut.lib?
我包含libut.lib,它提供了一些很好的函数来检测MEX文件中的中断(CTRL-C).相关声明(虽然这是下降主题):
// prototype the break handling functions in libut (C library)
extern "C" bool utIsInterruptPending();
extern "C" void utSetInterruptPending(bool);
Run Code Online (Sandbox Code Playgroud)