Matlab 2023b+Visual Studio 2022下配置Visual Studio2019编译器
系统要求以及支持的编译器:
Compatible Windows Compilers - MATLAB & Simulink (mathworks.cn)
Support - System Requirements and Supported Compilers Previous Releases - MATLAB & Simulink (mathworks.cn)
mex编译设置
以Win11+Matlab R2023b+VS2022为例,配置多编译器。一般先安装Visual Studio,再安装Matlab,可以避免很多注册表缺失导致的错误。
比如,想在VS2022中添加VS2019编译器。安装VS时,注意添加如下红框中的组件
在D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexopts
路径中找msvc, msvcpp
开头的两种文件,后面的数字就代表支持的VS版本
版本设置
对于VS 2017之前的版本,通过查看文件D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexopts\msvc2017.xml
得知,之前的版本通过搜索注册表值实现对编译器的查找。因此需注意注册表项\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\
中是否有项\SxS\VS7\
该项下是否包含名为15.0
(VS 2015–>14.0)的字符串值。若没有则应新建。
注册表修改方式可参考链接:
Matlab2016及以上版本设置VS编译器
对于VS 2019以及VS 2022,则通过用于检测和管理 Visual Studio 实例的工具 | Microsoft Learn中介绍的vswhere.exe
检测VS的版本信息。
以上方式已经安装MSVC V142 VS2019 生成工具
,但matlab运行mex -setup -v
命令查看Matlab选择编译器的过程,查看Matlab是否支持Visual Studio版本。
发现只有VS 2022编译器被找到,VS2019没有找到。
查看VS编译器安装路径C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC
,其下已经包含两个编译器的安装文件,即两个编译器已经安装成功,只是matlab没有找到。
观察matlab运行mex -setup -v
命令中的shell命令执行结果,当版本检测为[17.0,18.0)
时有输出结果,输出为VS 2022安装路径。
# 社区版 Microsoft.VisualStudio.Product.Community
>"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -version "[17.0,18.0)" -products Microsoft.VisualStudio.Product.Community -property installationPath -format value
C:\Program Files\Microsoft Visual Studio\2022\Community
紧接着执行的语句以及输出如下:
>set "vcroot=C:\Program Files\Microsoft Visual Studio\2022\Community"&for /f "delims= " %a in ('type "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt"') do @if exist "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\%a\bin\HostX64\x64\cl.exe" call echo %vcroot%
C:\Program Files\Microsoft Visual Studio\2022\Community
如上可以找到VCToolsVersion
设置文件对应的文件夹C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\
,其下有配置文件
Microsoft.VCToolsVersion.default.txt
和Microsoft.VCToolsVersion.v143.default.txt
对应默认的VS2022编译器
Microsoft.VCToolsVersion.v142.default.txt
对应VS2019编译器。
路径D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexopts
原msvc2019.xml
中对应如上shell命令的区域:
将原文件另存为副本,然后做"两"处修改。(里面多为相同内容,用编辑器一次性修改所有)
- 解决
vswhere.exe
检测版本区间无法取到当前版本的问题。当前安装的VS2022对应17.0
,使区间包含即可。- 解决无法配置对应MSVC路径的问题。修改
Microsoft.VCToolsVersion.default.txt
为Microsoft.VCToolsVersion.v142.default.txt
修改后:
采用相同方式修改相同文件夹D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexopts\
下msvcpp2019.xml
然后matlab运行mex -setup -v
命令
可以配置不同的编译器。①为新添加的VS2019;②为上次选择的VS2022;③为找到的的VS2022.
VS2019 x86编译器
为什么要这么配置?目的是为配置 x86编译器作铺垫。
再另存一份msvc2019.xml
和msvcpp2019.xml
,重命名为msvc2019_x86.xml
和msvcpp2019_x86.xml
查看msvc2019_x86.xml
中路径
NCLUDE="$VCINSTALLDIR\include;$VCINSTALLDIR\atlmfc\include;$KITSROOT\include\$SDKVERSION\ucrt;$KITSROOT\include\$SDKVERSION\shared;$KITSROOT\include\$SDKVERSION\um;$KITSROOT\include\$SDKVERSION\winrt;$MATLABROOT\extern\include"
与MSVC安装路径C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.29.30133
下文件夹对比,发现缺少\atlmfc\
文件夹。
安装VS2019 MFC:
然后对msvc2019_x86.xml
和msvcpp2019_x86.xml
作如下修改:
- 命名与原x64进行区分。
- 修改x64为x86。
<!--msvc2019_x86.xml中 Name="Microsoft Visual C++ 2019 (C)"改为-->
Name="Microsoft Visual C++ 2019 x86 (C)"
<!--所有$VCINSTALLDIR\bin\HostX64\x64\改为:-->
$VCINSTALLDIR\bin\HostX64\x86\
<!--LIB="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64;$KITSROOT\Lib\$SDKVERSION\ucrt\x64;$KITSROOT\lib\$SDKVERSION\um\x64;$MATLABROOT\lib\$ARCH"
LIBPATH="$VCINSTALLDIR\lib\x64;$VCINSTALLDIR\atlmfc\lib\x64"中x64改为x86-->
LIB="$VCINSTALLDIR\lib\x86;$VCINSTALLDIR\atlmfc\lib\x86;$KITSROOT\Lib\$SDKVERSION\ucrt\x86;$KITSROOT\lib\$SDKVERSION\um\x86;$MATLABROOT\lib\$ARCH"
LIBPATH="$VCINSTALLDIR\lib\x86;$VCINSTALLDIR\atlmfc\lib\x86"
对msvcpp2019_x86.xml
作相同的修改。在matlab运行mex -setup
可见:①VS2019 x64编译器②VS2019 x86编译器③VS2022 x64编译器
enjoy