编译php内核必要工具phpsdk,如何切换vc15工具集版本?
发布于 作者:苏南大叔 来源:程序如此灵动~大家一般很少部署生成环境到windows
系统,所以一般来说,都是在类linux
环境下使用php
的。而事实上,在windows
环境下,也是可以运行php
内核的。编译的话,相对而言是麻烦一些。所以,如果您在windows
环境下,使用php.exe
。最好的办法是直接下载。如果,您是想体验一下编译php
内核的乐趣的话,那就一起来吧。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述,在`windows
环境下编译php
内核的第一步,下载phpsdk
,并对phpsdk
做点小的分析修改。本文测试环境:win10
,vs2017
,phpsdk@2.2.1-dev
。
合适的编译环境
首先需要明确要编译的php
内核的版本,因为不同的内核有着不同的推荐编译器版本。下面的文章里面,有着官方推荐的编译器和内核的列表:
苏南大叔的目标php
内核版本是目前最新的php@7.4.28
,所以选择的编译器版本是vs2017
。具体的选择过程,可以参考下面的文章:
下载并安装好合适的vc141
工具集之后,就是需要下载php
官方推荐的phpsdk
工具集了。地址见下方:
- 【推荐】 https://github.com/php/php-sdk-binary-tools
- 【疑废】 https://github.com/microsoft/php-sdk-binary-tools
下载后解压到合适的位置,可以看到目录结构如下:
这里的vc14
、vc15
、vs16
的字样,是phpsrc
方面对visual studio
里面的vc
工具集的简称。其中,vc15
这个命名中的vc
字样,是个美丽的误会,导致的错误命名。后续使用vs
来命名,修正了这个错误。(其实是visual studio
不按套路出牌,导致的误会。)
phpsdk
与vcvarsall.bat
phpsdk
的逻辑,实际上就是根据目标特征(例如vc15
,x64
)寻找本机的vc
环境,然后调用visual studio
里面对应的vcvarsall.bat
,进而设置cl.exe
为代表的工具集路径的过程。
根目录下面的几个.bat
文件的调用关系如下:
phpsrc
代码逻辑的小缺陷
php@7.4
可以识别1916
,php@7.2
无法识别1916
。所以下文所说的都是最新版vs2017
编译php@7.2
。
是否识别为vc15
而不是untested
是在phpsrc
里面configure.js
里面所决定的,而这个文件是来自于phpsrc\win32\build\confutils.js
文件。在php7.2
代码中,可以看到:代码并不认识1916
,只认识1911
和1912
。然而,php@7.4.28
的同位置代码,却并没有1911
或者1912
的设定,可以完美识别1916
。所以,以下的更改,只是在描述phpsrc@7.2
系列为代表的源码。相关代码仅供参考,并没有太大的价值。
苏南大叔要使用的vs2017
里面的vc15
,然而其默认的1916
工具集是phpsrc
官方所不推荐的。而phpsdk
里面又没有给出对应的切换方式。根据苏南大叔的测试,1916
工具集作为vc15
的一份子,是能够正常工作的。然而phpsrc
官方的态度就是:能工作就是不推荐。
所以,当您使用vc15
对应的.bat
文件的时候,您也许可以:
- 安装
vs2017
组件里面的14.12
工具集,其实就是1912
工具集。 - 然后修改
phpsdk
里面的逻辑,主动传入参数-vcvars_ver=14.12
。
这样的话,就是使用官方推荐的vc15
小版本里面,较新的1912
了。主要修改文件如下:
这里是苏南大叔原创的内容,转载请保留版权信息。
phpsdk-vc15-x86.bat
/phpsdk-vc15-x64.bat
,不做修改。phpsdk-starter.bat
:
if /i "%1" equ "-vcvars_ver" set vcvars_ver=%2 & shift
//...
title PHP SDK %CRT% %ARCH% %vcvars_ver%
call %PHP_SDK_ROOT_PATH%\bin\phpsdk_setshell.bat %CRT% %ARCH% %vcvars_ver%
bin\phpsdk_setshell.bat
:
if "%3"=="" (
set PHP_SDK_VS_SHELL_CMD="!PHP_SDK_VC_DIR!\Auxiliary\Build\vcvarsall.bat" amd64
) else (
set PHP_SDK_VS_SHELL_CMD="!PHP_SDK_VC_DIR!\Auxiliary\Build\vcvarsall.bat" amd64 -vcvars_ver=%3
)
if "%3"=="" (
set PHP_SDK_VS_SHELL_CMD="!PHP_SDK_VC_DIR!\Auxiliary\Build\vcvarsall.bat" x86
) else (
set PHP_SDK_VS_SHELL_CMD="!PHP_SDK_VC_DIR!\Auxiliary\Build\vcvarsall.bat" x86 -vcvars_ver=%3
)
这样修改后,就可以给phpsdk
传递-vcvars_ver
参数了,和vcvarsall.bat
的官方使用体验完全一致。例如:
phpsdk-vc15-x64.bat -vcvars_ver=14.12
phpsdk-vc15-x86.bat -vcvars_ver=14.12
参考文献
总结
本文仅仅是说了windows
环境下,编译php
内核的第一步phpsdk
,或者说,只是一个对phpsdk
的大体认识篇。更多php
内核编译的文章,请参考下面的链接:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。