所谓工欲善其事,必先利其器,我将用两节课的内容向大家介绍 C++ 的开发工具开发环境的一些知识。

Visual Studio 诞生至今已有 25 年以上的历史,功能强大,用的人非常多,社区的朋友戏称它为宇宙最强大的 IDE,我觉得如果不考虑外星文明的话,它确实是名副其实的。下图是 GitHub 统计的 IDE 排名情况,Visual Studio 稳居第一。

本节课我们就介绍一些 Visual Studio 的基本功能,从如何安装 Visual Studio 到使用 Visual Studio 开发一个简单的 C++ 应用程序,再到 Visual Studio 中的一些常用功能和配置属性,总之,我会尽可能地带领大家从 Visual Studio Code 迁移到 Visual Studio 上来

使用 Visual Studio 开发工具

你可以从 Visual Studio 官网下载 Visual Studio 开发工具。选择 Community 版即可。

Visual Studio 是一个集成开发工具,在安装的时候,我们只要选择 C++ 相关的套件即可,如下图所示:

注意:我们安装的 Windows SDK 的版本是 10.0.19041.0,稍后我们还会介绍到它。

前端开发者的现代 C++ 课 - 刘晓伦liulun - 掘金小册专门为前端开发者“定制”的现代 C++ 编程指南。「前端开发者的现代 C++ 课」由刘晓伦liulun撰写,490人购买https://s.juejin.cn/ds/kUo6RHC/

由于是在线安装,所以安装过程比较漫长,需要耐心等待。如果你要离线安装 Visual Studio,可以参考这篇文章的后半部分。

安装完 Visual Studio 之后,创建一个 C++ 空项目,如下图所示:

项目创建成功之后,你会在 Visual Studio 右侧看到解决方案资源管理器的界面:

上图中,头文件源文件资源文件都是过滤器,并不是文件夹,如果你希望让解决方案资源管理器显示具体的文件路径,可以点击红框标记的按钮(显示所有文件按钮)。

右键点击解决方案资源管理器中的工程文件(上图中黑色粗体标记的项),为工程添加一个 main.cpp 文件,这就是我们的第一个程序文件。在这个文件中键入如下代码:

#include <iostream>
int main() {std::cout << "Hello World!" << std::endl;char c = std::getchar();return 0;
}

上述代码使用std::cout向控制台窗口输出一个字符串Hello World!,接着使用std::getchar方法接收用户输入的一个字符,当用户真正输入字符后,程序退出(本节旨在介绍开发环境,这里只简单介绍一下代码)。

接着点击 Visual Studio 中的调试按钮,启动程序,如下图所示:

此时你会看到控制台窗口输出 Hello World!,随便输入一个字符,然后按下回车键,应用程序会跟着退出,符合我们的预期。

程序运行一次之后会在 \x64\Debug 目录下生成 exe 可执行文件,如果你把上图中的 Debug选项调整成 Release ,再次运行程序,那么 \x64\Release 目录下也会生成相应的可执行文件。如果你把上图中的 x64 选项调整成 x86 ,再次运行程序,那 \Release 或 \Debug目录下会出现相应的可执行文件。

我们可以在源码编辑器的左侧为程序设置断点,当程序运行到断点之后会停止运行,此时我们可以把鼠标移至某个变量,观察它此刻的值,如下图所示:

调试方式和我们在网页中用开发者调试工具调试 JavaScript 代码类似

熟悉 Visual Studio 开发工具

如果你的代码存在错误,那么在启动调试之后,Visual Studio 会在错误列表窗口给出错误提示,如下图所示:

鼠标双击某行错误信息,C++ 编辑器会直接为你定位到出错的行。

另外,启动调试之后,Visual Studio 会在输出窗口给出编译过程信息及开发者要求输出到控制台的信息,如下图所示:

如果你不小心关闭了这两个窗口,那么可以在菜单视图->输出、菜单视图->错误列表中重新打开这两个窗口。

作为前端开发者你肯定熟悉 VS Code 的快捷键,你可以通过如下方式把 Visual Studio 的快捷键设置成与 VS Code 相同的快捷键方案(点击菜单工具->选项打开如下窗口):

设置好快捷键之后,按下 Ctrl+F 键打开查找窗口,你可以在这个窗口中查找源码中指定的信息,如下图所示(注意查找范围):

按下 Ctrl+P 后打开文件查找对话框,输入文件名就可以查找工程中指定的文件,如下图所示:

当工程变得庞大之后,这两个查找窗口非常有用。

Visual Studio 还有很多有用的窗口,这里我们只介绍比较重要的几个,其他的就留给你自己去探索了。

常规配置属性

右键点击工程文件,打开工程的属性对话框,如下图所示:

首先配置下拉框中默认包含 Debug 和 Release 两个选项,默认情况下使用 Debug 方式编译出的二进制程序未经压缩和优化,体积较大,但便于调试。使用 Release 编译出的二进制程序,经过了压缩和优化,体积较小,便于分发给用户。

平台下拉框中默认包含 X64 和 Win32 两个选项,这两个选项标志着你在为什么平台编译程序,X64 是指 64 位操作系统,Win32 是指 32 位操作系统。

切换了这两个下拉框之后,下面的配置属性中的选项也会跟着切换,也就是说,如果你把 Debug 的配置属性修改的和 Release 的配置属性一模一样,那么即使使用 Debug 编译应用程序,最终得到的也是压缩和优化的二进制程序,与使用 Release 编译出的二进制程序一模一样

在上图配置属性->常规的配置项中,输出目录指定的是工程编译完成后二进制程序输出的目录路径;中间目录是编译过程中产生的一些临时文件的存放路径;目标文件名是编译完成后二进制程序的文件名。

这三项配置都用到了 Visual Studio 内置的配置宏,比如$(SolutionDir)代表着工程文件所在目录,你可以到微软官网查阅具体的宏对应的含义。

上图中 配置类型 为编译后生成的二进制程序的文件类型,常见的有动态库.dll静态库.lib应用程序.exe,其中应用程序.exe 就是可执行程序,这里就不多做解释了。

我们可以简单地把动态库理解为 dll 文件,应用程序可以在运行时主动地加载动态库并调用动态库暴露出来的方法。这很像我们在 Node.js 代码中 require 一个独立的 js 文件

一个动态库可以被多个应用程序同时使用,Windows 操作系统内就包含了很多动态库。实际上 Node.js 的原生模块(.node 文件)就是一个比较特殊的动态库。

我们可以简单地把静态库理解为 lib 文件,静态库文件里包含库的实现代码,如果一个应用程序依赖某个静态库,那么编译这个应用程序时,就会直接把静态库编译到应用程序自己的二进制文件中。这很像 Webpack 或 Rollup 帮我们把多个 js 脚本捆扎成一个 js 脚本,这样在分发应用程序时,就不必再分发库文件了。

由此可见,动态库有利于复用,静态库有利于分发

每个 Windows 应用程序都会或多或少地依赖操作系统 API,Windows SDK 版本就是为你的应用程序指定系统 API 版本的配置项,我们安装 Visual Studio 的时候,就安装了 Windows SDK 10.0.19041.0,选择什么 Windows SDK 版本意味着你的应用程序要兼容什么版本的 Windows 操作系统。不过 Windows 操作系统向来兼容性都很不错,一般开发者都会选择最新的 Windows SDK 版本。

平台工具集指定你的应用程序使用什么工具进行编译链接。这里需要注意的是,选择不同的平台工具集后 Windows SDK 版本也可能会跟着切换,因为有些低版本的平台工具集无法适配高版本的 Windows SDK。此处我们也应该尽量使用最新版本的平台工具集。

C++ 语言标准指定你的应用程序使用什么版本的 C++ 进行开发。自 C++ 11 以来,C++ 标准委员会每 3 年发布一个版本,不过编译器对新语言特性的支持相对来说比较滞后,目前来看新项目使用 C++ 17 的开发者比较多,不过我们选择 C++ 20,提早让大家熟悉这个版本的 C++ 语言。

其他重要的配置属性

配置项配置属性->调试->命令参数可以让你通过 Visual Studio 启动应用程序调试时,为你的应用程序传入特定的命令行参数。同样你也可以在这个面板中设置应用程序的工作目录

你可以在配置属性->生成事件面板中配置应用程序的生成前事件链接前事件生成后事件,这些地方设置的都是 CMD 命令,你可以让这些命令帮你完成很多有用的任务,比如应用程序生成前准备环境,应用程序生成后打扫垃圾等。

如果你希望你开发的应用程序有更高的权限,访问一些特殊文件或系统 API,那么你可以配置配置属性->链接器->清单文件、 UAC 执行级别UAC 绕过 UI 保护配置项。

开发桌面应用时,要把配置属性->链接器->系统->子系统的值设置为窗口 (/SUBSYSTEM:WINDOWS);开发控制台应用时,要把值设置为控制台 (/SUBSYSTEM:CONSOLE)

开发桌面应用时,如果你的窗口界面显得模糊不清,那么可以把配置属性->清单工具->输入和输出->DPI识别功能设置为高DPI识别

总结

本节我们主要介绍了“宇宙最强大的 IDE ”: Visual Studio 的一些基础功能和配置。

  • 首先,我们介绍了如何安装 Visual Studio(安装过程中附带安装了 Windows SDK );
  • 接着,我们使用 Visual Studio 开发了一个简单 C++ 的程序(同时还讲解了怎么调试这个程序);
  • 然后,介绍了 Visual Studio 的一些基础功能(比如查找字符串或文件等功能);
  • 最后,我们介绍了 C++ 工程的一些常规配置属性(动态链接库、静态链接库、平台工具集等)。

开发者仅仅了解这些内容肯定还不能娴熟地使用 Visual Studio 开发 C++ 项目,下一节将进一步介绍 Visual Studio 开发工具的相关知识。

前端开发者的现代 C++ 课 - 刘晓伦liulun - 掘金小册专门为前端开发者“定制”的现代 C++ 编程指南。「前端开发者的现代 C++ 课」由刘晓伦liulun撰写,490人购买https://s.juejin.cn/ds/kUo6RHC/

C++ 开发环境其实挺难搞的(上)相关推荐

  1. 在win7系统 Keil 开发环境下 Jlink 仿真器连不上解决办法

    Keil 开发环境下 Jlink仿真器,在win7系统下,仿真器连不上解决办法 进入设备管理器,发现黄色问号,即windows不识别设备,分别右键点击属性,更新驱动程序.在安装keil目录下自动查找, ...

  2. java开发环境(sts,eclipse等等)解决项目上的红叉和红色感叹号的方法。

    原文链接:https://blog.csdn.net/qq_37240283/article/details/80619088 贾三小姐之名

  3. python开发环境比较好_python开发环境比较好,python 集成开发环境哪个好

    python 集成开发环境哪个好 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提 ...

  4. windows驱动开发环境搭建以及helloworld

    文章目录 前言 编译环境-WDK的安装 搭建测试驱动的虚拟机 win11虚拟机 win10虚拟机 在测试机器上运行驱动 修改注册表-显示调试信息 上面驱动代码含义 测试证书签名 其他 旧版本的visu ...

  5. 配置TS + node 的开发环境

    直接配置ts的开发环境还是挺麻烦的,这里我总结了一套开发模板,可以在用的时候可以考虑直接clone这个项目, 以这个项目为基础模板https://github.com/fish-node/templa ...

  6. Windows10 + Visual Studio 2017 + CMake +OpenCV编译、开发环境配置及测试

    由于最近需要使用OpenCV,本人需要在自己的PC上使用OpenCV,因此最近一直在研究如何使用Visual Studio编译OpenCV源代码并搭建开发环境,折腾了很长时间,查阅了很多相关资料,终于 ...

  7. linux studo命令,在 Linux 上使用 Visual Studio 开发环境

    原标题:在 Linux 上使用 Visual Studio 开发环境 为了向大家介绍 "Linux 上的 ASP.NET Core",我需要一个 Linux VM,通过远程桌面连上 ...

  8. 我的.NET开发环境设置

    我想大家在开发过程中可能同样会遇到下列问题: 1,多平台开发 不同的开发工具,相同开发工具的不同版本混装在一起,稍有不慎就会搞得乱七八糟. 2,试用新控件或者新工具 很自然的,因为没用过,搞乱系统也就 ...

  9. Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于C SDK的ESP8266开发技术全系列笔记 一.N ...

最新文章

  1. 移动应用程序和网页应用程序_您的移动应用程序运行缓慢的主要原因以及如何修复它...
  2. C语言中结构体参数变量的传递
  3. AprilTag中的g3d.h和g2d.c文件
  4. WCF IE 能够正常访问,chrome 和firefox不能正常访问
  5. laravel8 模型自定义方法_Laravel 8.14.0 发布,PHP Web 开发框架
  6. 解决模拟MOSS用户调用WebService打开个人站点进行操作
  7. Jquery事件、冒泡、委托与节点
  8. Problem A: 删除区间内的元素(线性表)
  9. 讲解Java中的String几种类型
  10. 我们常说的算法时间复杂度和空间复杂度到底是什么?
  11. ostringstream使用
  12. Proteus 8.12 仿真软件安装(Proteus8.6Proteus8.14下载)
  13. RSA非对称加密密钥生成方法
  14. 组合数学—什么是组合数学(1)
  15. 集成运算放大器之积分电路搭建
  16. pionner软件操作笔记
  17. Qt FTP文件上传下载简单例子
  18. Android 圆圈统计图(支付宝饼图)
  19. 电子邮箱邮件怎么撤回,邮箱如何撤回邮件?
  20. 电子电路学习笔记(14)——LDO(低压差线性稳压器)

热门文章

  1. phpmyadmin #1193 - Unknown system variable ‘lc_messages‘ 解决过程
  2. macos浅色模式_macOS终于获得了正确的黑暗模式
  3. 战网登录器:完美解决炉石美台国服三合一
  4. 【NOIP模拟】幻象
  5. 蓝牙耳机已连接电脑仍外放
  6. IDEA 使用Git图文详解
  7. C语言实现基础查找算法
  8. 线下零售门店如何在微信视频号/小程序/公众号网上开店
  9. Z05 - 025、明细表、宽表、窄表 - 实现
  10. Redisson与SpringBoot整合