c++ - 检查是否使用 MATLAB mex 编译

标签 c++ c matlab mex

我想制作一个跨平台函数,如果在 MATLAB 下编译,该函数将具有额外的功能。 有没有一个定义可以给我这些信息?

换句话说,我的实现方式如下:

void f(void) {
    if (x) {
        (...)
    }
#ifdef MATLAB
    do_other_stuff();
#endif
}

我需要更换一些东西

#ifdef MATLAB

验证它是否在 matlab 下编译为 MEX 函数。

我的“>> mex -v”输出:

'>> mex -v
-> mexopts.sh sourced from directory (DIR = $HOME/.matlab/$REL_VERSION)    
   FILE = /home/bmmo/.matlab/R2009b/mexopts.sh
----------------------------------------------------------------
->    MATLAB                = /usr/matlab2009b
->    CC                    = gcc
->    CC flags:
         CFLAGS             = -ansi -D_GNU_SOURCE  -fexceptions -fPIC -fno-omit-frame-pointer -pthread
         CDEBUGFLAGS        = -g
         COPTIMFLAGS        = -O -DNDEBUG
         CLIBS              = -Wl,-rpath-link,/usr/matlab2009b/bin/glnxa64 -L/usr/matlab2009b/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++
         arguments          =  -DMX_COMPAT_32
->    CXX                   = g++
->    CXX flags:
         CXXFLAGS           = -ansi -D_GNU_SOURCE -fPIC -fno-omit-frame-pointer -pthread
         CXXDEBUGFLAGS      = -g
         CXXOPTIMFLAGS      = -O -DNDEBUG
         CXXLIBS            = -Wl,-rpath-link,/usr/matlab2009b/bin/glnxa64 -L/usr/matlab2009b/bin/glnxa64 -lmx -lmex -lmat -lm
         arguments          =  -DMX_COMPAT_32
->    FC                    = g95
->    FC flags:
         FFLAGS             = -fexceptions -fPIC -fno-omit-frame-pointer
         FDEBUGFLAGS        = -g
         FOPTIMFLAGS        = -O
         FLIBS              = -Wl,-rpath-link,/usr/matlab2009b/bin/glnxa64 -L/usr/matlab2009b/bin/glnxa64 -lmx -lmex -lmat -lm
         arguments          =  -DMX_COMPAT_32
->    LD                    = gcc
->    Link flags:
         LDFLAGS            = -pthread -shared -Wl,--version-script,/usr/matlab2009b/extern/lib/glnxa64/mexFunction.map -Wl,--no-undefined
         LDDEBUGFLAGS       = -g
         LDOPTIMFLAGS       = -O
         LDEXTENSION        = .mexa64
         arguments          = 
->    LDCXX                 = 
->    Link flags:
         LDCXXFLAGS         = 
         LDCXXDEBUGFLAGS    = 
         LDCXXOPTIMFLAGS    = 
         LDCXXEXTENSION     = 
         arguments          = 
----------------------------------------------------------------

提前致谢。

最佳答案

尝试运行

>> mex -v

在您的 Matlab 中检查它列出的 COMPFLAGS

在我的机器上,我看到 /DMATLAB_MEX_FILE 正在定义一个 const MATLAB_MEX_FILE 。我想其他平台也是如此,但值得提前检查。

关于c++ - 检查是否使用 MATLAB mex 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24679744/

相关文章:

c++ - 连接两个 std::vectors

c - 处理访问不存在的命令行参数的段错误

matlab - 网格网格的内存高效替代品

matlab - 如何使用牛顿法求解积分的上限?

python - C++ 扩展 Python : How to determine python function name on C callback

c++ - 两个不同的库使用相同的名称类型

c++ - Crypto++ 和压缩 EC key

c - sscanf 行为不同

c - 如何在 Windows 上使用 MPI 和 OpenMP 编译和执行 C 程序

matlab - 在 Matlab 中设置 linprog