這是可能的,但它非常混亂:我認爲整個mbuild/deploytool系統是一個cr * p。 deploytool.bat的第一個問題是,雖然有一個'-win32'選項,但是當不從32位安裝目錄調用deploytool時,它不起任何作用。第二個問題是,mbuild選項爲32位和64位版本共享,所以必須手動指定它們,否則會使用錯誤的編譯器選項。
下面是我編寫的32位和64位從一個64位Windows機器與VS2010安裝的一些事情。
- 您必須安裝32位和64位版本的MATLAB
- 你就必須在命令行中做的一切
- 你永遠無法通過部署工具UI編輯.PRJ文件,因爲它搞砸了一切對它們進行手動更改。 (好吧,從現在起,這實際上是一個好處,至少你可以將它們存儲在VCS中)
- 指向正確的編譯器選項,將
<param.c.cpp.options.file>
添加到「配置」部分下的prj中(參見下文)
- 構建由manully給予32位安裝的deploytool.bat完整路徑
選項PRJ文件配置:
<deployment-project>
<configuration ....>
....
<param.c.cpp.options.file>${MATLAB_ROOT}\bin\win32\mbuildopts\msvc100compp.bat</param.c.cpp.options.file>
....
需要注意的是輸出目錄等將是32位相同和64位版本。在實踐中,如果您必須爲多個項目執行此操作,則此操作完全不可管理。所以我有一個MSBuild腳本,使生活更輕鬆:基本上在prj文件中,我用宏替換了所有依賴於平臺(輸出目錄,matlab根目錄,選項文件位置)的宏,然後讓msbuild複製prj並執行正則表達式查找/替換具有取決於平臺的值的宏。這允許在兩個平臺上使用相同的prj。
更新
經過幾次大的變化對我們的項目,我們發現,最終處理的MATLAB PRJ文件的麻煩是不值得的。相反,我們通過直接調用mcc
大大簡化了所有操作,並將其與屬於某個項目的所有文件一起提供。這裏是相關的msbuild代碼;
<Target Name="BuildMatlabProject">
<PropertyGroup Condition="$(MlPlatform)=='x86'">
<MlMatlabBinDir>$(MlMatlabx86Dir)\bin\win32</MlMatlabBinDir>
</PropertyGroup>
<PropertyGroup Condition="$(MlPlatform)=='x64'">
<MlMatlabBinDir>$(MlMatlabx64Dir)\bin\win64</MlMatlabBinDir>
</PropertyGroup>
<ItemGroup>
<MlMFiles Include="$(MlMatlabProjDir)\*.m"/>
<MlMResources Include="$([System.IO.Directory]::GetDirectories("$(MlMatlabSrcDir)"))"/>
</ItemGroup>
<PropertyGroup>
<MlMresourcseString Condition="@(MlMResources)!=''"> -a @(MlMResources, ' -a ')</MlMresourcseString>
</PropertyGroup>
<RemoveDir Directories="$(MlOutDir)" ContinueOnError="true"/>
<MakeDir Directories="$(MlOutDir)"/>
<Exec Command="$(MlMatlabBinDir)\mcc -W cpplib:$(MlOutputName)_$(MlPlatform)
-T link:lib -d $(MlOutDir) -f $(MlMatlabBinDir)\mbuildopts\msvc100compp.bat
-w enable:specified_file_mismatch -w enable:repeated_file -w enable:switch_ignored
-w enable:missing_lib_sentinel -w enable:demo_license -v
@(MlMFiles, ' ') $(MlMresourcseString)"/>
</Target>
它需要這些特性:
- MlPlatform:86建立32位,64位來生成64位
- MlMatlabx86Dir:路徑MATLAB支持32位的安裝目錄
一些錯誤檢查,爲了清楚起見省略
- MlMatlabx64Dir:路徑MATLAB的64位安裝目錄
- MlMatlabProjDir:路徑「項目」與M文件目錄編譯
- MlMatlabSrcDir:輸出目錄
- MlOutputName:輸出名稱
哇...謝謝您的回答有額外源M文件
我剛剛閱讀你的答案好一點,但我仍然不明白爲什麼我的程序不起作用:我不使用matlab中的任何buildtools,我只是包含並鏈接到lib和dll,所以我的程序可以使用引擎。據我所知,deploytool只是一個工具,用於爲MEX文件編譯正確的程序。但是,我不建立一個MEX文件,我手動配置我需要的設置。但是,必須以某種方式設置設置,以便我可以導出到32位,而無需安裝32位版本。 – Tiddo
@Tiddo你使用什麼庫?在我的64位安裝中,在extern/lib/win64下只有64位庫,因此它們不可能用於構建32位版本 – stijn