[英]Matlab `mcc`: All m-files to include when compiling executable?
我有一個Matlab腳本go.m
,它可以創建自定義對象並運行一系列仿真。 有興趣將其移植到Matlab許可證很少的其他網絡中。 我們的策略是將腳本編譯成獨立的* .exe,以便它可以在不使用許可證的情況下運行。 一旦我弄清楚了所有的繩索,Matlab編譯器運行時將安裝在目標系統上。
我設法使用命令行mcc
來編譯TMW在線示例magicsquare 。 使用cygwin
的bash:
$ cd ~/bin
$ ln -s "/c/Program Files/MATLAB/Single_R2015b/bin/mcc.bat" mcc
$ cd ~/tmp/magicSqr
$ mcc -m magicsquare.m
# startup.m messages indicate that this launches Matlab
$ ./magicsquare.exe 5
Running C:\cygwin64\tmp\User.Name\mcrCache9.0\magics1\Users\User.Name\Documents\MATLAB\startup
m = 17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
既是目錄規范.
和文件擴展名.exe
是必需的。
我的下一步是在過程中推動成熟的go.m
,看看有什么go.m
,並找到最輕松的方法來處理它。 至少,繁瑣的操作是指需要最少的代碼修改的策略,這樣我就不必維護用於開發和移植到目標的單獨代碼庫。
該mcc
編譯工作: mcc -m go.m
。 但是,運行*.exe
文件會導致在第一個可執行語句: profile off
處損壞。 就像我說的那樣,在戰術上進行個性化編碼非常不愉快,因此我尋找了一種方法來標識運行mcc
時要包括的所有文件。 兩個有希望的線索是inmem
和requiredFilesAndProducts
。 但是,以上網頁也警告:
不要使用依賴關系報告來確定其他人運行特定文件需要哪些MATLAB代碼文件。 而是使用matlab.codetools.requiredFilesAndProducts函數。
看來 ,要避免依附報告是指從輸出mfiles inmem
。 通過檢查上述m文件可以證實這一點-該列表非常長,並且包括混淆甚至Matlab的which
命令的功能:
>> which matricize
'matricize' not found.
唯一的其他候選用於識別M-文件包括從輸出FLIST requiredFilesAndProducts
。 它似乎包括我的自定義類的所有方法,以及c:\\Users\\User.Name\\Documents\\MATLAB\\
(我路徑中唯一的自定義文件夾)中駐留的所有調用的m文件。 但是,它肯定不包括構成上述錯誤的profile
命令。
為mcc
識別所有m文件和/或其文件夾的最佳方法是什么? 然后使用條件執行來處理任何剩余的導致錯誤的語句是否合理(例如, if ~isdeployed; <...problematic statements...>; end
if ~isdeployed; <...problematic statements...>; end
if ~isdeployed; <...problematic statements...>; end
嗎?
您可以參考此處的文檔頁面上的列表,以獲取有關不支持使用MATLAB Compiler和MATLAB Compiler SDK產品進行編譯的功能的信息: https : //www.mathworks.com/help/compiler/unsupported-functions.html
以下頁面還顯示了每個單獨工具箱與MATLAB Compiler的兼容性: https : //www.mathworks.com/products/compiler/supported/compiler_support.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.