Có thể, nhưng nó vô cùng lộn xộn: toàn bộ hệ thống mbuild/deploytool là một phần của ý kiến của tôi. Vấn đề đầu tiên với deploytool.bat là, mặc dù có một tùy chọn '-win32', điều đó không có tác dụng gì khi deploytool không được gọi từ thư mục cài đặt 32bit. Vấn đề thứ hai là các tùy chọn mbuild được chia sẻ cho các phiên bản 32 và 64 bit, do đó chúng phải được chỉ định bằng tay vì các tùy chọn trình biên dịch sai được sử dụng.
Dưới đây là một số điều tôi đã làm để biên dịch cả 32bit và 64bit từ một máy tính Windows 64 bit với VS2010 được cài đặt.
- bạn phải cài đặt cả 32bit và 64bit phiên bản matlab
- bạn sẽ phải làm tất cả mọi thứ từ dòng lệnh
- bạn không bao giờ có thể chỉnh sửa các file .prj chưa qua ui deploytool vì nó vít lên tất cả thay đổi thủ công được thực hiện cho họ. (tốt, đó thực sự là một lợi ích từ bây giờ ít nhất bạn sẽ có thể lưu trữ chúng trong một VCS)
- trỏ đến các tùy chọn trình biên dịch chính xác bằng cách thêm
<param.c.cpp.options.file>
vào phần prj trong phần 'cấu hình' (xem bên dưới)
- xây dựng bởi manully cho đường dẫn đầy đủ đến deploytool.bat của quá trình cài đặt 32 bit
tùy chọn tập tin config trong prj:
<deployment-project>
<configuration ....>
....
<param.c.cpp.options.file>${MATLAB_ROOT}\bin\win32\mbuildopts\msvc100compp.bat</param.c.cpp.options.file>
....
Lưu ý rằng sản lượng dir vv sẽ giống nhau cho 32bit và phiên bản 64 bit. Trong thực tế, nếu bạn phải làm điều này cho nhiều dự án, điều này trở nên hoàn toàn không thể quản lý được. Vì vậy, tôi có một kịch bản msbuild để làm cho cuộc sống dễ dàng hơn: về cơ bản trong tệp prj tôi thay thế mọi nền tảng phụ thuộc (đầu ra dir, thư mục gốc matlab, tùy chọn vị trí tệp) bằng macro, sau đó hãy để msbuild sao chép prj và thực hiện regex tìm/thay thế các macro có giá trị tùy thuộc vào nền tảng. Điều này cho phép sử dụng cùng một prj cho cả hai nền tảng.
Cập nhật
Sau một vài thay đổi lớn cho các dự án của chúng tôi, chúng tôi phát hiện ra rằng cuối cùng những rắc rối đối phó với các file prj matlab là không có giá trị nó. Thay vào đó, chúng tôi đơn giản hóa mọi thứ bằng cách gọi trực tiếp mcc
và cấp dữ liệu đó với tất cả các tệp thuộc về một dự án.Đây là mã msbuild có liên quan; một số kiểm tra lỗi bỏ qua cho rõ ràng:
<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>
Nó cần những thuộc tính:
- MlPlatform: x86 để xây dựng 32 bit, x64 để xây dựng 64 bit
- MlMatlabx86Dir: đường dẫn đến matlab 32bit cài đặt dir
- MlMatlabx64Dir: đường dẫn đến matlab 64bit cài đặt dir
- MlMatlabProjDir: đường dẫn đến 'dự án' dir với các tệp m để biên dịch
- MlMatlabSrcDir: đường dẫn với nguồn phụ m-file
- MlOutDir: sản lượng thư mục
- MlOutputName: Tên sản lượng
Wow ... Cảm ơn câu trả lời của bạn. Tôi nghĩ rằng tôi sẽ gỡ bỏ cài đặt MatLab 64-bit và cài đặt 32-bit. Tôi không thực sự cần phải xuất khẩu sang 64-bit, tôi đã chỉ hy vọng có một cách dễ dàng để biên dịch sang 32-bit mà không cần phải cài đặt 32-bit MatLab. Nhân tiện, tôi không sử dụng deploytool một cách thủ công. Tôi chỉ cho vs2010 biên dịch mọi thứ cho tôi. – Tiddo
Tôi chỉ đọc câu trả lời của bạn tốt hơn một chút, nhưng tôi vẫn không hiểu lý do tại sao chương trình của tôi không hoạt động: Tôi không sử dụng bất kỳ buildtools nào từ MATLAB, tôi chỉ bao gồm và liên kết đến lib và dll's, vì vậy chương trình của tôi có thể sử dụng động cơ. Theo như tôi có thể hiểu, deploytool chỉ đơn giản là một công cụ biên dịch chương trình với các thiết lập chính xác cho các tệp MEX. Tuy nhiên, tôi không xây dựng một tệp MEX và tôi định cấu hình cài đặt theo cách thủ công mà tôi cần. Nhưng hơn nó có thể được có thể trong một số cách để thiết lập các thiết lập theo cách mà tôi có thể xuất khẩu đến 32 bit mà không cần phải cài đặt một phiên bản 32-bit phải không? – Tiddo
@Tiddo bạn sử dụng libs nào? Trong cài đặt 64 bit của tôi, chỉ có 64bit libs trong extern/lib/win64 nên chúng không thể được sử dụng để xây dựng phiên bản 32bit – stijn