2014-07-10 97 views
2

我想製作一個跨平臺的函數,如果在MATLAB下編譯,那麼它具有額外的功能。 有沒有可以給我提供這些信息的定義?檢查是否用MATLAB編譯mex

換句話說,如下我實現它:

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   = 
---------------------------------------------------------------- 

在此先感謝。

回答

2

嘗試在Matlab的運行

>> mex -v 

,並檢查它列出了COMPFLAGS

在我的機器上,我看到/DMATLAB_MEX_FILE這是一個常量MATLAB_MEX_FILE正在定義。我想這是其他平臺的情況,但其值得提前檢查。

+1

這是我在編譯我正在用多個可能的編譯器開發的庫時使用的。 +1。 – rayryeng

+0

那麼,在我的情況下,定義不存在。我在Linux 64位,Matlab R2009b。但我已經看到了你的解決方案,顯然它適用於其他人 – manatttta

+0

@manatttta你是否已經通過運行'>> mex -setup'配置了你的mex編譯器?你可以發佈運行'>> mex -v'的輸出嗎? – Shai