visual studio2017内置的c++工具集,到底属于哪个版本?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔正在试图在win10
系统下,搭建phpsrc
的编译环境。根据php
的官方文档,搭建目前最新的php@7.4
的话,需要的先安装visual studio@2017
,然后才能继续操作。话题就从这第一步vs2017
展开,搭建c++
的编译环境的话,到底是需要怎么安装的呢?里面的vc
工具集到底是个什么样的版本?
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述vs2017
的vc
版本号的问题,当然如果您不是很较真,或者也没有意识到这个vc
版本号有什么问题的话,本文也是可以略过的。确实无伤大雅,在这个小细节上纠缠,意义也不是特别大。如何您和苏南大叔一样,喜欢较真。那么,本文值得一看。
本文测试环境:win10
,vs2017@15.9.45
。龙套演员:phpsrc@7.4
,phpsdk@2.2.1-dev
。
对于同一个vc@1916
,php@7.4
识别为vc15
,php@7.2
识别为19.16 untested
。
官方描述
根据php
的官方描述,在windows
环境下编译php@7.4
解释器的话,需要vc15
,也就是需要安装vs2017
。链接如下:
然而,就是这样简简单单的一句话,苏南大叔在里面反复徘徊了好几天。反复尝试多次,才得出结论:官方的这句环境描述的话并不是十分准确。本文将对这句话,做个深入的解析。
php
官方关于visual c++
编译器兼容性方面的更多描述:
安装visual studio
在微软官方页面上,visual studio
的版本号已经是2022
。
关于社区版、专业版和企业版,苏南大叔的需求上来说,社区版就足够了。
以前版本的visual studio
(例如:visual studio@2017
),需要登录之后,下载:
- https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
- https://my.visualstudio.com/Downloads?q=Visual%20Studio%202017
- https://download.visualstudio.microsoft.com/download/pr/4dfffe3f-2a7e-4dea-922b-62d4beca5e36/ca4ebbc3bee27caa44ef91b21bc30837a028c23a046c009600038316e5976b5b/vs_Community.exe
苏南大叔的win10
上面,登录着skype
。在登录界面上输入正确的skype
账号后,居然没有让输入密码就直接登录成功了。这个过程很令人惊讶。
对于本文编译php@7.4
的需求,大家最好需要安装vs2017
。别以为vs2022
向下兼容之类的云云,并不是这样的。由于,网上各个渠道下载到的vs.exe
都是引导安装的。所以,实际上,首页无需登录的vs2022
的安装引导程序里面,也是可以安装vs2017
的。关闭默认安装界面,到“可用选项卡”里面去看看。
安装默认项
无论从哪个渠道得到的vs2017
的引导安装程序,界面都是非常类似的。推荐的设置是:
勾选“使用c++的桌面开发”,然后默认选项继续安装,就可以获得符合“phpsrc@7.4”的编译需求的vc15
了。
只不过,最后编译出的php.exe
会显示,使用的是19.16.27045, untested
编译的。如果您不介意的话,这个故事也就到此结束了。而事实上,期待的是显示使用vc15
编译的。这里仅仅是文字上的转化19.16.27045, untested
=>vc15
。
其实,19.16.27045
也是vc15
的成员之一。但是,phpsdk
并不认识。
vc
工具集目录
安装vs2017
的时候,切换到“组件”里面,拉到最下方的c++
组件,勾选vc14.11
,vc14.12
,vc14.13
等,然后继续安装。
这样的话,在下面目录中,就可以得到多个可用的vc
工具集的合集。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC
勾选vc140
的话,
得到的是另外一个目录(仅供参考):
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\
如果仅安装相应的组件,而不安装“工作负载”的话,也就是说不安装"c++桌面环境"的话,是不能完成php
内核编译的要求的。错误提示如下:
切换vc
工具集
工具集的切换方法是什么呢?
根据微软官方博客描述,这里存在着一个vcvarsall.bat
文件,它有一个参数-vcvars_ver
,可以用于切换vc
工具集。
对于苏南大叔的vs2017社区版
,它的位置是:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat
切换范例:
vcvarsall.bat x64 -vcvars_ver=14.11.25503
vcvarsall.bat x64 -vcvars_ver=14.11
vcvarsall.bat x64 -vcvars_ver=14.16.27023
vc14
如果正常安装后,也是可以通过上述vs2017
的vcvarsall.bat
进行切换的。比如:
vcvarsall.bat x64 -vcvars_ver=14.0
值得注意的是:不要在一个cmd
里面反复测试上述命令,会引起混乱。好像有个看不到的隐藏规则,每次执行的命令是叠加的。
后话就是:vs2022
里面的vcvarsall.bat
,似乎并不支持-vcvars_ver
参数。不过phpsrc
的编译,目前也并不需要vs2022
。
查看版本号
切换完成后,可以执行命令,查看版本号:
cl -Bv
或者
cl.exe -Bv
phpsdk的代码显示:它们也是使用上述这个类型命令查看版本号的。
环境变量
如果大家看截图的话,可以发现vcvarsall.bat
是可以在任何地方执行的,这是因为苏南大叔把它的目录加入到了环境变量里面。而cl.exe
也在环境变量里面,不过,它是被vcvarsall.bat
临时有条件(-vcvars_ver
)的设置的。
实际上每个toolset
都有一个独立的cl.exe
等一系列文件,各个文件cl.exe
之间版本号是不一致的。
对应关系
对于vs2017
里面所带的c++
工具集来说,对应关系如下图所示:
其中vc14.11
、vc14.12
、vc14.13
以及vc14.16
都是vc15
,安装完成后都在一个目录下面。但是,只有vc14.11
、vc14.12
得到了phpsdk
官方认证为通过测试的vc15
,vc14.13
和vc14.16
都是untested
状态。
vc14.0
虽然也可以通过vs2017
的组件进行安装,但是安装完成后是独立的目录。但是,也支持通过vs2017
的vcvarsall.bat
文件进行切换。vc14.0
属于vs2015
的一部分。
参考文献
- https://devblogs.microsoft.com/cppblog/visual-studio-build-tools-now-include-the-vs2017-and-vs2015-msvc-toolsets/
- https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line
- https://newsn.net/say/centos-phpsrc.html
总结
写到这里,本文的行文目的大概就结束了。至于phpsdk
和vcvarsall.bat
配合的事情,那是另外一篇文章的内容了。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。