Matlab2023b+VS2022下配置VS2019编译器

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.txtMicrosoft.VCToolsVersion.v143.default.txt对应默认的VS2022编译器
Microsoft.VCToolsVersion.v142.default.txt对应VS2019编译器。

路径D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexoptsmsvc2019.xml中对应如上shell命令的区域:
在这里插入图片描述

将原文件另存为副本,然后做"两"处修改。(里面多为相同内容,用编辑器一次性修改所有

  1. 解决vswhere.exe检测版本区间无法取到当前版本的问题。当前安装的VS2022对应17.0,使区间包含即可。
  2. 解决无法配置对应MSVC路径的问题。修改Microsoft.VCToolsVersion.default.txtMicrosoft.VCToolsVersion.v142.default.txt

修改后:
在这里插入图片描述

采用相同方式修改相同文件夹D:\ProgramFiles\MATLAB\R2023b\bin\win64\mexopts\msvcpp2019.xml

然后matlab运行mex -setup -v命令
在这里插入图片描述

可以配置不同的编译器。①为新添加的VS2019;②为上次选择的VS2022;③为找到的的VS2022.

VS2019 x86编译器

为什么要这么配置?目的是为配置 x86编译器作铺垫。
再另存一份msvc2019.xmlmsvcpp2019.xml,重命名为msvc2019_x86.xmlmsvcpp2019_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.xmlmsvcpp2019_x86.xml作如下修改:

  1. 命名与原x64进行区分。
  2. 修改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

  • 29
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值