MCC学习总结
本文來自:?高校自動化網(Www.zdh1909.com)?詳細出處參考(轉載請保留本鏈接):http://www.zdh1909.com/html/matlab/16654_2.html
?
? mcc是調用matlab編譯器的命令,你可以從matlab命令行或者DOS,UNIX命令行調用它。它用于將M文件部署到Matlab運行環境外,產生在C和C++里的(wrapper)文件,和有選擇的建立獨立的二進制文件。默認情況下,它將所有結果文件寫入當前文件夾。如果指定了多個M文件,編輯器將為每個文件殘生一個C或C++的函數。如果C或目標文件被指定,他們將連通產生的所有C文件被送到mbuild。
?
mcc?[-options]?mfile1?[mfile2?...?mfileN]?[C/C++file1?...?C/C++fileN]
選項:
?
-a:加入到檔案文件。
?
添加一個文件到CTF檔案文件。使用
CODE:
?
-a?filename
將一個文件直接加入到CTF檔案文件。可以多次使用-a選項。編譯器會在matlab路徑中尋找這些文件,所以指定完整路徑是可選的。這些文件不會被送到mbuild,所以,你可以包含類似數據文件的文件。
?
-b:產生Excel兼容的公式函數。
?
產生一個VB文件(.bas)包含Excel公式函數接口的COM對象。當被導入到工作表VB代碼,這些代碼將允許matlab函數作為一個單元格公式函數來使用。這需要matlab的Excel編譯工具。
?
-B:指定包文件(bundle?file)。
?
在mcc命令行,將文件替換為制定文件的內容。使用
CODE:
?
-B?filename[:?<a1>,?<a2>,?...,?<an>]
這個包文件名,應該僅包含mcc命令行選項和對應的參數或者其他文件名。這個文件還可以包含其他-B選項。
?
-c:只產生C代碼。
?
當此選項同一個宏被調用時,將產生C代碼,但是不調用mbuild,也就是,不產生單獨的可執行程序。等價于放在mcc命令行后的-T選項。
?
-d:指定輸出文件夾。
-f:指定選項文件。
-g:產生調試信息。
-I:添加文件夾到Path。
-m:產生一個可單獨運行的文件。
-M:直接傳遞。
-N:清空Path。
-o:指定可執行文件名。?
-p:將文件夾加入到Path。
-R:運行時。?
-T:指定目標階段。
指定輸出文件的目標階段和類型。使用
CODE:
-T?target
來定義輸出類型。合法的目標值是:
codegen
compile:exe
compile:lib
link:exe
link:lib
?
-v:顯示詳細信息。
-w:顯示警告信息。
-W:指定包裝函數類型。
控制產生函數包裝。使用
CODE:
-W type
來控制產生的M文件函數的包裝類型。你提供一個函數列表,編譯器將產生這些函數的保證和任何適當的全局變量的定義。下面是合法的type參數。
main:產生一個POSIX腳本main()函數;
lib:<string>:產生一個初始化和終止函數,用于編譯器產生的函數被編譯進一個大的程序。這一選項同樣產生一個頭文件,包含指定M文件所有函數的原型。<string>成為產生的C/C++文件和頭文件的基礎文件名。創建一個.exports文件,包含了所有非靜態函數名。
com:<component_name>,<class_name>,<version>:從M文件產生一個COM對象。
none:不產生包裝文件,默認為none。
?
-Y:license文件。
-z:指定路徑。
?
為myfun.m產生一個可執行文件:
CODE:
?
mcc?-m?myfun
為myfun.m產生一個可執行文件。myfun.m文件在/files/source文件夾,并將結果C文件和可執行文件放到/files/target文件夾:
CODE:
?
mcc?-m?-I?/files/source?-d?/files/target?myfun
使用一個mcc調用為myfun1.m和myfun2.m產生可執行文件:
mcc?-m?myfun1?myfun2
?
為a0.m和a1.m創建一個共享/動態鏈接庫,叫liba:
CODE:
?
mcc?-W?lib:liba?-T?link:lib?a?0?a1
?
?
?
下文轉自:
?
?http://wenku.baidu.com/view/06f283c62cc58bd63186bd9a.html
1.當MATLAB用戶一開始并不知道當前版本的MATLAB?Compiler所支持的編譯器類型有哪些時,需設置編譯環境如下:
>>?mbuild?-setup
Please?choose?your?compiler?for?building?standalone?MATLAB?applications:
?
Would?you?like?mbuild?to?locate?installed?compilers?[y]/n??n????%輸入
?
Select?a?compiler:
[1]?Borland?C++Builder?version?6.0
[2]?Borland?C++Builder?version?5.0
[3]?Borland?C++Builder?version?4.0
[4]?Borland?C++Builder?version?3.0
[5]?Borland?C/C++?version?5.02
[6]?Borland?C/C++?version?5.0
[7]?Borland?C/C++?(free?command?line?tools)?version?5.5
[8]?Lcc?C?version?2.4
[9]?Microsoft?Visual?C/C++?version?7.1
[10]?Microsoft?Visual?C/C++?version?7.0
[11]?Microsoft?Visual?C/C++?version?6.0
?
[0]?None
?
Compiler:?11????????%輸入
?
Your?machine?has?a?Microsoft?Visual?C/C++?compiler?located?at
C:\Program?Files\Microsoft?Visual?Studio.?Do?you?want?to?use?this?compiler?[y]/n??y??%輸入
?
Please?verify?your?choices:
?
Compiler:?Microsoft?Visual?C/C++?6.0
Location:?C:\Program?Files\Microsoft?Visual?Studio
?
Are?these?correct?([y]/n):?y?????%輸入
?
Try?to?update?options?file:?C:\Documents?and?Settings\Administrator\Application
Data\MathWorks\MATLAB\R14\compopts.bat
From?template:??????????????C:\MATLAB7\BIN\WIN32\mbuildopts\msvc60compp.bat
?
Done?.?.?.
?
?
-->?"C:\MATLAB7\bin\win32\mwregsvr?C:\MATLAB7\bin\win32\mwcomutil.dll"
?
DllRegisterServer?in?C:\MATLAB7\bin\win32\mwcomutil.dll?succeeded
?
-->?"C:\MATLAB7\bin\win32\mwregsvr?C:\MATLAB7\bin\win32\mwcommgr.dll"
?
DllRegisterServer?in?C:\MATLAB7\bin\win32\mwcommgr.dll?succeeded
至此,環境配置已經完成了.
2.簡單也最常用的生成獨立.EXE文件命令:
mcc?-m?m文件名(如果主程序調用子程序時,要一起寫進去)
例如:
mcc?-m?pure?ssimplex?my_closereq
其中,pure,調了子程序ssimplex和?my_closereq
3.可在它端計算機獨立運行運行的方法:
(1)方法一:就生成了獨立EXE文件pure.m,把它與pure.ctf文件一起復制到MATLAB的安裝目錄\toolbox\compiler\deploy的目錄中,或者也可以在每次編譯后產生的mcr目錄內的\toolbox\compiler\deploy的目錄中搜索到.把deploy文件復制到它端計算機,都可以運行EXE文件.
(2)方法二:把MATLAB的安裝目錄\toolbox\compiler\deploy\win32的MCRInstaller.exe文件復制把在它端計算機,并安裝之,就可以把生成的獨立執行exe文件復制過去,即可獨立運行.
4.MATLAB保護文件(.p):
?
(1)編譯后的P文件比原與文件有相同的文件名,只是其擴展名為.p。而在MATLAB環境中P文件有比M文件較高的調用位級,因此如果MATLAB中存在相同文件名的P與M文件,則會以P文件為優先的調用順序。
(2)P文件有兩大優點:①增加文件的執行速度②能夠將文件保密。以第2點最為重要。P文件與M文件執行上的功能與操作方式都是一樣的,但最大的不同是P文件無法閱讀文件內容,因此可以很輕易地保持文件內容不外泄的效果。
(3)P文件的編譯方式如下:pcode?文件名
例如,將compiler_test.m這個文件編譯為P文件就必須輸入以下的程序:pcode?compiler_test
(4)當輸入compiler_test時,調用的是compiler_test.p,而不是compiler_test.m,因為P文件的優先度高于M文件件.
(5)P文件可以用來作保密代碼之用,如果你給別人一個M文件,別人可以打開來看到你所有的代碼和算法。如果你的代碼不想被別人看到,那可以給他P文件。
(6)當用GUI做界面時,給P文件的同時也應該給.fig文件才能夠運行得了.pcode函數也可以應用在M函數文件。
5.asv文件:
后綴為asv的文件是.m文件自動保存的時候產生的臨時文件,程序非正常退出的時候恢復用的,可以用記事本打開看一下,如果matlab正常關閉的話,刪掉沒影響。
在file-preference-Editor/debugger-autosave里可以改設置。
6.mat文件:
mat數據格式是matlab的數據存儲的標準格式。
可以調用matlab的子程序庫,用c或fortan調用mat格式的數據。
matopen?打開mat文件
matclose?關閉mat文件
magetfp?取得mat文件的c語言句柄
matGetArray?取得一個數組
?
?
轉載于:https://www.cnblogs.com/milier-otw/archive/2013/03/11/2954271.html
總結
- 上一篇: 问模板函数、函数模板,模板类、类模板的区
- 下一篇: IBM存储部分常见配件PN号查询及描述翻