微软便携编译器大全

10G打造微软全版本编译器大全

百度云盘下载 (后面更新后不另行通知)

最近升级一下VS到2017 发现2017的安装包需要 vs_professional.exe –layout c:\vs2017offline 可以把安装包缓下来
发现如今的VS已经是30多G的大小了, 勾选一下安装感觉小小的C盘开始紧张起来 看来VS越来越肥了
作为C++编译使用 无非就是编译和链接 于是就想起了 nmake和cmake

VC编译文件夹工具说明:

EXE 说明
cl.exe C/C++编译器
ml.exe 汇编编译器
nmake.exe 微软搞定makefile的工具
link.exe 链接器 把cl出来的obj 搞成exe或dll等
rc.exe 应该是资源编译吧
lib.exe 看名字是搞lib哦
其他exe 懒得管了

于是开始分析 “VS2013 x86 本机工具命令提示” 开始
这里写图片描述
在VS2013 x86 本机工具命令提示 下cl一下 看看版本
这里写图片描述
打开电脑上安装的vc2013看下vcvarsall这个文件的内容
这里写图片描述
到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat
看下内容
这里写图片描述

其实起作用的基本环境设置是

环境变量 说明
path //cl等工具运行路径和依赖
include //代码搜索路径
lib //lib搜索路径

现在一个exe通常是依赖 wdk crt mfc 等等

我以一个C++写的关机工具SQNativeC64为例,最基本的原生exe通常是依赖 KERNEL32 ,user32,XX32 等等
将这些依赖的XX32.DLL我简略认为 依赖Windows的WDK库

这里写图片描述

这里写图片描述

像msvcrtxx的(xx为90 100 ..)我简略认为 依赖crt库
像mfcxxu的(xx为90 100 ..)我简略认为 依赖mfc库

现在分别去找它们的include lib 和src(其实src对编译过程是没用 只不过微软提供让你看里面的实现好分析代码的问题)
我整理后就3个大结构目录

MFC crt
VC2013\ATLMFC\include
VC2013\ATLMFC\lib\x64
VC2013\ATLMFC\lib\x86
VC2013\ATLMFC\src
VC2013\CRT\include
VC2013\CRT\lib\x64
VC2013\CRT\lib\x86
VC2013\CRT\src

BIN(如下图所示)

这里写图片描述

这里就没有提取arm的编译器了 留下x64 x86 x86_amd64(这个是用32位cl交叉出64位的程序用的)
然后要确保上面的所有exe是不缺dll的不然后面使用cl时会有直接挂掉的尴尬。

接下来就是提取可怕的WDK 早期叫DDK 微软家族Windows的开发包
用虚拟机的干活 搞起来(虚拟机占很大磁盘 提取完了 看来得删除掉)
分别安装 vc6 vc7 vc2005 vc2008 vc2010 vc2012 vc2013 vc2015 vc2017 补丁全部打好
还有DDK_1830 WDK7.1 WDK8.1 WDK10 这些安装包msdn和百度网上找很多的
在虚拟机的快照中分别提取如下
这里写图片描述

提取完后的文件夹 这里VCREDIST是crt的dll 上面的cl文件夹的依赖和编译生成的exe依赖就都解决了
这里写图片描述

到此我就把 VCXX\BIN\vcvarsall.BAT 全部贴出来

cls
@echo off 
set VSNUM=2017
set VCNUM=vc15
set DDKNUM=v10.0A

:begin
if "%1" == ""         goto x86
if not "%2" == ""     goto usage
if /i %1 == x86       goto x86
if /i %1 == amd64     goto amd64
if /i %1 == x64       goto amd64
if /i %1 == x86_amd64 goto x86_amd64
if /i %1 == arm       goto arm
GOTO usage
:x86
COLOR E9
SET TMPVALUE=x86&CALL:SETNUM
GOTO x86_x64_arm
:amd64
COLOR 5F
SET TMPVALUE=x64&CALL:SETNUM
GOTO x86_x64_arm
:arm
COLOR 1F
SET TMPVALUE=arm&CALL:SETNUM
GOTO x86_x64_arm
:x86_amd64
COLOR 8F
SET TMPVALUE=x86_amd64&CALL:SETNUM
SET PLATFORM=x86
SET PLATFORMLIB=x64
SET POTHER= (%RUNEX%)
GOTO x86_x64_arm
:SETNUM
REM SET TMPVALUE
SET PLATFORM=%TMPVALUE%
SET PLATFORMLIB=%TMPVALUE%
SET RUNEX=%TMPVALUE%
GOTO EOF
:x86_x64_arm
call:EXTENDPATH
title AGAN Native C++ %VSNUM% %PLATFORMLIB% tools%POTHER%.
SET PATH3RD=%PATH3BIN%
SET PATH3RDINC=%PATH3INC%
SET PATH3RDLIB=%PATH3LIB%
set VCINSTALLDIR=%WORKDIR%VC%VSNUM%
set WINDOWSKITSDIR=%WORKDIR%WindowsKits\%DDKNUM%
set VCREDIST=%WORKDIR%WindowsKits\VCREDIST\%VCNUM%\%PLATFORM%;%WORKDIR%WindowsKits\VCREDIST\D3D\%PLATFORM%;%WORKDIR%WindowsKits\Tools\;%WORKDIR%WindowsKits\Tools\%PLATFORM%
set PATH=C:\Windows\System32;%VCREDIST%;%VCINSTALLDIR%\BIN\%RUNEX%;%VCINSTALLDIR%\BIN\%PLATFORM%;%WINDOWSKITSDIR%\bin\%PLATFORM%;%PATH3RD%;
set INCLUDE=%VCINSTALLDIR%\crt\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE;%WINDOWSKITSDIR%\include;%PATH3RDINC%
set LIB=%VCINSTALLDIR%\crt\LIB\%PLATFORMLIB%;%VCINSTALLDIR%\ATLMFC\LIB\%PLATFORMLIB%;%WINDOWSKITSDIR%\lib\%PLATFORMLIB%;%PATH3RDLIB%
set LIBPATH=%LIB%
GOTO EOF
:EXTENDPATH
if not exist "%~dp0..\..\extend.BAT" (set WORKDIR=%~dp0..\..) else (call "%~dp0..\..\extend.BAT")
GOTO EOF
:usage 
echo Error in script usage. The correct usage is: 
echo     %0 [option] 
echo where [option] is: x86 ^| amd64 ^| x86_amd64^| arm  
echo: 
echo For example: 
echo     %0 x64 
GOTO EOF
:EOF
再在VCXX目录 也就是VCXX\BIN\vcvarsall.BAT 中bin的上层建3个快捷
VCxxxx_x86          %comspec% /k ""bin\vcvarsall.bat"" x86
VCxxxx_x64          %comspec% /k ""bin\vcvarsall.bat"" amd64
VCxxxx_x86-amd64        %comspec% /k ""bin\vcvarsall.bat"" x86_amd64

再集成Cmake工具后给每个文件夹整个图标找起来就更快了 成果如下

这里写图片描述

vc.bat如下所示

@echo off
if "%1" == ""       (SET VSNUMBER=2015& goto VCXXSHELL)
if /i %1 == 6       (SET VSNUMBER=6& goto VCXX)
if /i %1 == 7       (SET VSNUMBER=7& goto VCXX)
if /i %1 == 8       (SET VSNUMBER=2005& goto VCXX)
if /i %1 == 9       (SET VSNUMBER=2008& goto VCXX)
if /i %1 == 10      (SET VSNUMBER=2010& goto VCXX)
if /i %1 == 11      (SET VSNUMBER=2012& goto VCXX)
if /i %1 == 12      (SET VSNUMBER=2013& goto VCXX)
if /i %1 == 14      (SET VSNUMBER=2015& goto VCXX)
if /i %1 == 15      (SET VSNUMBER=2017& goto VCXX)
if "%1" == "?"      goto HELP
if "%1" == "help"   goto HELP
SET VSNUMBER=2015
:VCXXSHELL
cls & call "%~dp0VC%VSNUMBER%\bin\vcvarsall.bat"
COLOR 0A
%comspec% /k 
goto end
:VCXX
call "%~dp0VC%VSNUMBER%\bin\vcvarsall.bat"
COLOR 0A
cls & goto end
:HELP
cls
echo    输入如下命令选择编译器版本:
echo    vc6      VS   vc 6
echo    vc7      VS   vc 7
echo    vc2005   VS   vc 8
echo    vc2008   VS   vc 9
echo    vc2010   VS   vc 10
echo    vc2012   VS   vc 11
echo    vc2013   VS   vc 12
echo    vc2015   VS   vc 14
echo    vc2017   VS   vc 141
echo    如vc2013 input:vc 12 or vc64 12
goto end
:end

运行vc.bat
输入 vc 14 就可切换进入vc2015
总文件夹约10G 压缩后1G左右 可根据需要适当精简 WindowsKits

分别测试编译boost sdl2 openssl 7z ogre … (注意有的库在老版本不一定能编 像vc2008前的有的需要很老的代码版本)
随着时间积累 根据自己的实际需要 可以自己扩展集成 如python perl jdk adk delphi …

这里写图片描述

至此分享完毕

猜你喜欢

转载自blog.csdn.net/xhamigua/article/details/80372742