你好,我是Chrono。
在开始正式的学习之前,我们需要先做一点准备工作——在自己的电脑上搭建出课程使用的实验环境。
我会给你推荐具体的操作系统、编译器,带你一步步搭建环境,还会给你分享我的GitHub链接,之后课程里的所有代码,你都可以在这里找到。
首先说一下操作系统。
目前流行的操作系统有三种:Windows、macOS和Linux。
Windows是应用得最广泛的一个系统了,是绝对的主流,但是,作为C++开发环境来说,Windows并不能算是首选。
一个原因是,Windows上的标准C++开发工具Visual Studio不是免费的,尽管它提供了可自由下载的社区版,但有各种限制(你可以看下社区版和其他版本的差异),用来做实验还行,如果要用来开发正式的软件,就不是那么合适了。
另一个更重要的原因是,Windows现在已经不再是C++的“主战场”了,现在开发Windows程序,更多的是用C#、Java、TypeScript等其他语言,在Windows上写C++程序,很难有大的作为,会有种“英雄无用武之地”的感觉。
macOS是苹果的专用系统,比较“小众精英”,用户比较少。必须要承认,它是一个很高效易用的开发环境,但也有点“曲高和寡”,不是每个人都能有一台MacBook的。而且,macOS虽然也是UNIX,但它源自FreeBSD,内部结构、使用方式与Linux有一些差异。
macOS也有与Windows相同的问题,它的官方开发语言是Objective-C、Swift,几乎没有纯粹使用C++开发出的Mac应用。
所以,我建议你使用Linux操作系统,它是完全自由、免费的系统,不受任何人的控制,开发工具链非常完善,而且,目前差不多所有的商业网站的服务器(当然还有Android)上跑的都是Linux,而C++也正好能在开发后台应用服务方面大显身手,两者可谓是“绝配”。
选好了Linux操作系统,接下来就要选择编译器了。
虽然C++20马上就要发布了,但现在C++标准的实际普及情况还是相当落后的。据我多年的观察,很多企业因为各式各样的原因,还在用着老旧的操作系统和编译器,别说C++20了,连C++17都很少用到。
所以,从应用现状出发,我不会使用那么“超前”的标准和编译器,而是选择更贴合实际、更“接地气”的编译器,让你在工作中能够立即用得上,不用苦等操作系统、编译器的升级。
好了,说一下我对编译器的要求:至少要支持C++11,支持到C++14最好,对再往上的17/20则不强求,在今后的课程中,也会尽量不涉及17/20里的特性。
把这几点要求落实到Linux上的默认编译器GCC,就是4.6或者是 4.8版本,越高越好。至于具体版本GCC对C++的支持程度,可以在它的官网上找到。
GCC通常是和Linux系统绑定在一起的,选编译器也就相当于选择Linux的版本。
Linux也是版本众多,最常见的是RedHat系的CentOS和Debian系的Ubuntu。
这两个被很多企业广泛采用,但CentOS通常比较“稳定”,更新较慢,像CentOS 6一直用的是GCC 4.4,CentOS 7也才是4.8,对C++标准的支持很不完善,极大地限制了C++能力的发挥。
所以,我建议使用的Linux操作系统是Ubuntu,最低版本是16.04。这个系统里的GCC版本是5.4,完美支持C++11/14。当然,你要是愿意安装更新的18.04、20.04也没有问题,它们里面的GCC版本更高,支持C++17,只不过有点“功能过剩”。
确定了操作系统和编译器以后,该去哪里找一个这样的开发环境呢?
你的公司里或许就有现成的Linux服务器,可以直接登录上去用,但公司服务器的环境不一定满足刚才说的那几点要求,而且还得小心,别把系统搞乱了,所以,还是弄一个自己的实验环境最保险。
好在如今的虚拟技术非常成熟,只要安装一个虚拟机软件,再去Ubuntu官网下载一个光盘镜像,然后按部就班地点点鼠标就行了。
这里我选择的是免费的VirtualBox,版本任意,Ubuntu则是64位的桌面版。至于它们俩具体的安装过程,网上有很多资料,而且我相信,即使没有资料,也难不倒你,所以我就不再多说了。
弄好VirtualBox和Ubuntu环境之后,还有一个小小的“收尾”步骤。
Linux系统里通常默认只有GCC,没有G++,所以还要再执行一个apt-get命令:
sudo apt-get install g++
安装完成后,在命令行里敲一下“g++”命令,看一下它的版本号是否满足我们的要求:
g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
和之前的《透视HTTP协议》一样,我也在GitHub上为这个课程建立了一个项目:cpp_study,里面有很多示例代码和有用的资料链接,你可以在Linux环境里用“git clone”下载。
不过,说起来不怕你笑话,我写了二十来年的C++程序,但一直不怎么会写Makefile。都说写Makefile是C++程序员的“基本功”,但我在这方面的确是“缺失”了,有点惭愧啊。
最早,我用的是Windows+VC自带的工程文件;后来转到Linux开发,用的是Boost的构建工具b2(Boost Build v2),写的是jamfile;再后来又定制开发Nginx,用的是Nginx自成体系的Shell config。
你看,这么多年来我就基本没正经写过Makefile,而且也没怎么用过其他的构建工具,比如cmake、scons。
所以呢,在这个GitHub项目里,我也就没有办法提供专门的Makefile,只能麻烦你在命令行上手动敲GCC的编译命令了。好在示例代码都很短很小,没有复杂的依赖关系,简简单单就能搞定,比如:
g++ xxx.cpp -std=c++14 -o a.out
这里需要注意的是参数“-std=c++14”,它告诉编译器,在处理C++代码的时候使用C++14标准,而不是11/17/20。
手敲命令还是挺麻烦的,所以,我在源码文件里还用注释的形式给出了编译命令,你可以直接拷贝粘贴使用,希望能够给你带来一点点的方便。
// Copyright (c) 2020 by Chrono
//
// g++ test.cpp -std=c++11 -o a.out;./a.out
// g++ test.cpp -std=c++14 -o a.out;./a.out
// g++ test.cpp -std=c++14 -I../common -o a.out;./a.out
在目录“section0”里,有一个最基本的示例程序,如果你能够正确地编译并运行,就说明实验环境搭建成功了。
在我的虚拟机里,这个程序的输出是(使用-std=c++14):
c++ version = 201402
gcc version = 5.4.0 20160609
gcc major = 5
gcc minor = 4
gcc patch = 0
libstdc++ = 20160609
显示使用的是C++14标准,GCC版本是5.4.0,标准库版本是20160609。
当然,如果你是写Makefile的高手,欢迎你给这个项目提Pull Request,让其他同学都能用make来轻松地编译代码。
作为正式开课前的“热身工作”,今天我介绍了课程使用的实验环境,简单小结一下:
那么,行动起来吧,下节课让我们在Linux上愉快地一起“玩耍”。
评论