如何建立 stand-alone 的MATLAB 應用程式

方煒、饒瑞佶


在 MATLAB 的 Command Window 中輸入以下語法:

mcc -m test

可以將 test.m 原始碼轉換成 C語言的原始碼並編譯成 test.exe 的可執行檔。

如果 test.m 程式中有用到其他 .m 程式,此時須將所有用到的 .m 程式置於同一目錄,再進行編譯的動作。


安裝C語言編譯器

假設有一個 main.m 的程式需要進行編譯, 由於缺乏適當編譯器,執行編譯指令(mcc)後出現的情況如下圖所示:


編譯前須先安裝C語言的編譯器(下載 )。


使用mbuild進行設定(setup)

編譯器安裝完成後,仍須使用mbuild 指令告知MATLAB 編譯器有關 C編譯器的相關目錄,執行過程如下:

首先在 MATLAB 的Command Window 中輸入 mbuild -setup,出現如下畫面的前兩行,回答 n,接著選擇安裝的 C語言編譯器種類,輸入 1 選擇 Borland C++,接著輸入 1 選擇 5.0 版,接著輸入 c:\borland\bcc55 告知編譯器檔案的存放目錄。最後,回答 y 確認上述設定無誤之後,可完成使用mbuild 指令於 MATLAB 編譯器中針對 C編譯器的設定。




建立 Stand-alone MATLAB 應用程式

完成 C編譯器安裝與mbuild 的設定後,我們可以進行 MATLAB 的 stand-alone 應用程式的編譯。假設有兩個MATLAB 程式,如下:

%main.m
function main
r = mrank(7);
r

% mrank.m
function r = mrank(n)
r = zeros(n,1);
for k = 1:n
e=[num2str(k) ' by ' num2str(k) ' matrix']
magic(k)
r(k) = rank(magic(k));
end

在MATLAB 的 Command Window 中使用 mcc -m main 指令進行編譯。結果可在MATLAB 的 current 目錄 (如下圖)中
產生幾個檔案,簡列如下:

其中,main.exe 為stand-alone 的應用程式。

主程式(main.m)中有呼叫副程式(mrank.m),編譯器可自動找到所有的副程式檔案, 並產生相同檔名的 .c, .h (main.c, main.h, mrank.c, mrank.h)檔案。另有一個main_main.c 程式 為一個由編譯器產生的 main wrapper。出現兩次main 係由於上例的主程式名稱正好也為 main,如果主程式名稱為 test.m,則此時產生的為 test_main.c。


程式執行

選擇'開始','程式集','附屬應用程式','命令提示字元' (Command Prompt), 輸入完整的path (c:\matlabr11\work\) 與檔案名稱 (main),執行結果如下:







MATLAB 編譯器的限制

mcc 只能編譯函數,如果是 script 則無法編譯,如上例的 main.m 程式中,如果缺乏紅色字的那一行指令,則該程式為 script 而非 function。編譯時出現錯誤訊息如下:


修正方式為在Script M-file程式的首列加一行指令定義為某個函數名稱即可,該函數可以沒有任何參數。

MATLAB程式中若有用到繪圖相關指令,則需要其他的 Graphic Library。

更多mcc與 mbuild的相關說明,請參見 MATLAB 的 online help:在 Command Window 中輸入 help mcc 或 help mbuild 即可