Visual Studio C++ 开发完全体
什么是解决方案
visual studio的文件管理符合其为超大项目服务的定位,在 项目
外还有一层 解决方案
,用来将一组项目归入其中并管理依赖等,依然符合树形结构。外/解决方案A/项目1
外/解决方案A/项目2
外/解决方案B/项目3
很多时候有一个这样的全局大目录就够了,还是能以项目为独立分隔的单位,所以无妨。但请养成项目管理的好习惯。
C++编译和运行
visual studio的编译单位是项目,用visual studio 提供的编译工具不能编译单个文件(当然可以用vscode实现)
解决方案中有多个项目。调试整个解决方案时,右键某个项目设为启动项目
项目设置
项目右键属性,其中的目录一栏可以设置项目有关的目录,包括 生成目录
,引用目录
,库目录
-
引用目录:导入头文件,用
#include " "
引入,随项目编译,修改后要重新编译(目前不知道还有啥用) -
包含目录:也是导入头文件,但处理逻辑默认倾向于作为库使用,用
#include < >
引入,修改后要重新链接。建议用于软件库的 include 目录,基本是和库目录成对导入 -
库目录:导入库文件,软件库的使用一般是编译得到头文件和库文件两个目录,再导入配置,库文件也是编译生成的,见下方 ↓
当然,有时候还得在
属性
-链接器
-输入
里设置 lib 文件
库文件
程序生成历经编译 - 链接
-
编译是导入头文件转换成汇编,但头文件仅有声明,最终汇编代码中,头文件内函数的跳转地址只能留空
-
而链接大致就是找到目标函数本体的地址并填充,成为一个完整的可执行程序,而目标函数所在的程序就是库
那么库的意义是?
- 提前编译一部分可复用的源文件,提高编译链接效率
- 避免源文件直接暴露。最终声明在头文件,而实现在库文件,库保留了源文件除编辑以外的功能(?
静态库 .lib
在编译时就运行,最终和主程序捆绑载入内存
动态链接库 .dll
在运行时才会报缺失,动态链接库在内存中不和主程序绑定,可以实现多个程序共用
导入内容
顶栏
-视图
-其他窗口
-属性管理器
,打开预设配置
项目右键
-属性
,打开项目配置,可以继承预设配置中的内容
-
VC++目录
-包含目录
,找构建完成的路径下的include
目录例如
opencv\build\include
-
VC++目录
-库目录
,找构建完成的路径下的lib
目录例如
opencv\build\x64\vc15\lib
-
链接器
-输入
-附加依赖项
,一般添加库目录
下的.lib
文件例如
opencv_world3414.lib
opencv_world3414d.lib
,后者是 Debug 用的库
在属性管理器中,添加新项目属性表,可以在其中添加用户宏,用宏名称代替一串路径
偏好设置
代码样式
如果安装了 ReSharper
务必注意,部分 VS 自身的设置会被 ReSharper
覆盖,比如代码格式化