这是可能的,但它非常混乱:我认为整个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