使用属性表快速设置带有MEX文件的Visual Studio项目
所有设置都可以通过属性表应用,这是一种快速应用Visual Studio项目配置的机制。
步骤:
- 从这个GitHub仓库下载属性表(MATLAB.props)。它简短而精炼。我实际上建议你自己制作一个,以了解该过程涉及的内容。有关说明,请参见下面的“属性表详细信息”部分。
- 设置MATLAB根环境变量:
MATLAB_ROOT
为64位MATLAB安装,MATLAB32_ROOT
为任何32位MATLAB安装(例如:C:\Program Files\MATLAB\R2014b\
)。此文件夹具有子目录bin、extern、sys等。如果打开了VS,请重新启动。
- 在Visual Studio中创建一个空的DLL项目,可以选择创建x64解决方案平台。通过选择“Win32 Project”并选择DLL来执行此操作:
![enter image description here](https://istack.dev59.com/EEkf9.webp)
在“属性管理器”(从“视图”菜单中选择)中,对于每个项目的构建配置,请右键单击并选择
“添加现有属性表...”,然后选择适当的属性表(32位或64位)。 (请参见下面的屏幕截图)
![enter image description here](https://istack.dev59.com/pnmDB.webp)
就这样了!
记住,当在MATLAB中使用您的MEX文件和在Visual Studio中构建新版本之间切换时,需要运行clear mex
或clear specificMEXFileName
才能覆盖它。
我几乎都是用这种方式构建我的MEX文件。
更新(05/22/15):文件MATLAB.props现在支持并行计算工具箱以使用mxGPUArray
对象。如果您的计算机上存在工具箱路径和库(gpu.lib),则可以使用它们。只需包括CUDA SDK“Build Customization”(如果已安装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
。
- 设置输出文件扩展名(例如,对于x64,为
.mexw64
)。
不是必需的,但它还可以指定未嵌入在库中的输出清单,设置MATLAB_MEX_FILE
并打开生成所需用于分析的数据。
为了完整性,请注意,项目配置有一个更正式的“build configuration”系统,包括属性表,但是松散的属性表足以设置简单的MEX项目。
关于-largeArrayDims
的说明
-largeArrayDims
选项是MATLAB中mex
命令的一个开关,它简单地表示不定义MX_COMPAT_32
。因此,在Visual Studio中,您无需做任何事情,因为默认情况下不定义它。如果您想要相反的行为(-compatibleArrayDims
),则在预处理器部分中定义MX_COMPAT_32
。
libut.lib是用来做什么的?
我包含了libut.lib,它提供了一些很好的函数,用于在MEX文件中检测中断(CTRL-C)。相关的声明(虽然这已经偏题):
extern "C" bool utIsInterruptPending();
extern "C" void utSetInterruptPending(bool);