使用Visual Studio进行编译时的MEX选项

时间:2014-09-23 15:02:00

标签: matlab visual-studio mex

由于某些原因,我必须在Visual Studio环境下编译我的MEX文件。有很多教程,我的MEX文件工作正常。但是,有一些MEX选项,例如-largeArrayDims选项中的mex,我不知道在VS环境下何处打开。有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:2)

-largeArrayDims选项是在MATLAB中切换到mex命令,仅指示不定义MX_COMPAT_32。因此,在Visual Studio中,您不必执行任何操作,因为默认情况下未定义此操作。如果您想要相反的行为(-compatibleArrayDims),请在预处理器部分中定义MX_COMPAT_32。来自tmwtypes.h:

<强> tmwtypes.h

#ifdef MX_COMPAT_32
typedef int mwSize;
typedef int mwIndex;
typedef int mwSignedIndex;
#else
typedef size_t    mwSize;         /* unsigned pointer-width integer */
typedef size_t    mwIndex;        /* unsigned pointer-width integer */
typedef ptrdiff_t mwSignedIndex;  /* a signed pointer-width integer */
#endif

通常,使用属性表来设置构建MEX文件的所有必要设置(库依赖项,标题,MEX文件扩展名等)很方便。可以找到一个自动为32位或64位MATLAB工作的单个属性表at GitHub

在Property Manager中将属性表添加到MEX项目的每个构建配置中(右键单击Debug | x64等配置,然后选择“添加现有属性表”。请参阅this post for detailed instructions

一些补充说明:

  1. 我更喜欢使用/EXPORT:mexFunction而不是.def文件。使用单个导出函数,这更加简单。
  2. 属性表生成清单文件,但实际上没有必要。
  3. 我包含了libut.lib,它提供了一些很好的函数来检测MEX文件中的中断(CTRL-C)。相关的声明(虽然这是偏离主题):
  4. // prototype the break handling functions in libut (C library)
    extern "C" bool utIsInterruptPending();
    extern "C" void utSetInterruptPending(bool);