最近下载了C++ primier 5th源码,使用nmake,cl命令工具编译的时候出问题了,如下代码报":语法错误",我也奇怪for (auto c : s)是什么鬼?
string s("Hello World!!!");
// punct_cnt has the same type that s.size returns
decltype(s.size()) punct_cnt = 0;
// count the number of punctuation characters in s
for (auto c : s) // for every char in s
if (ispunct(c)) // if the character is punctuation
++punct_cnt; // increment the punctuation counter
问我码友,码友说这就是C++11新特性auto推导.所以我就知道问题所在了,我一直用的都是vs2010,是不支持c++11的,问题来了,要怎样支持C++11呢,网上查了下,几乎所有人都回复:"换更高版本编译器啊".
我为啥坚持用2010呢,因为它体积小,安装速度快.好多年前安装过vs2012,那体积那个巨大啊,再者我电脑只有可怜的256G,说多了都是泪啊.问题来了,我既不想用体积巨大的高版本vs,又想使用C++11语句,怎么办?
我想了下,按照之前配置nmake的经验,将另台装了VS高版本的电脑里的VS CMD开发工具链+头文件+LIB复制过来应该就好了,说做就做:
1.向我的码友要了VS2017的CMD开发工具链+头文件+LIB.
2.微软官网下载了win10 SDK安装程序,然后双击安装,等待安装完成.
3.按照这位高手博客配置了环境变量: https://blog.csdn.net/weixin_41115751/article/details/89817123
下图为环境变量配置过程:
新建环境变量INCLUDE,新建如下5行,首行为include.rar解压后路径,剩下4行为win10 sdk安装路径.
1) D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
2) D:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
3) D:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
4) D:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
5) D:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
新建环境变量LIB,新建如下3行,首行为lib.rar解压后路径,剩下2行为win10 sdk安装路径.
1) D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\x86
2) D:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86
3) D:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86
配置VS cmd命令行cl,link,nmake工具链.新建如下路径.
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\Hostx86\x86
配置完成后,进入cmd,nmake all进行编译
报错,C2732与lround冲突,
inits.cpp报错,看这个cpp,
包含了一个verson_test.h,就是这个头文佳出的问题,下图,咱们进入这个头文件
找到问题了,win10sdk头文件和这个头文件函数重定义,所以咱们把他屏蔽就好了
我使用#if方式屏蔽,发现没有,lround变成了虚线,代表屏蔽生效.
继续执行nmake all,又报错,见下图
看下图,报错部分代码,估计朋友们有疑惑了,返回值bool类型,而getline返回值为std::basic_istream<_Elem,_Traits> &,肯定报错呀.
看注释"Copyright (c) 2013 by Objectwrite, Inc., Josee Lajoie, and Barbara E. Moo."
这是人家大神写的代码,为啥这么写,我也不知道.
见下图,修改后的代码.
继续nmake all,编译成功.
查看目录,obj及exe皆已生成.
至此,代表我们的VS工具链(cl,link,nmake)已配置成功,可以使用makefile编译C++11代码.
附件为VS2017工具链资源及win10 SDK安装包,须在线升级,win10 SDK实在太大,就没有放资源,请谅解.
资源下载地址:
https://download.csdn.net/download/oqqsoap1234567/12513008
微软官方win10 SDK安装包源网址:
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/