软件下载关联地址(老版本要求登录,新版本是在线安装)VS2017 VS2019
Visual Studio 2022 路线图 | Microsoft Docs (工具站MSDN, 我告诉你 - 做一个安静的工具站)
配置安装选项
VS2008按下选项 > X64编译器和工具 - VS2008配置x64平台,即64位编译器,如下:
默认安装根目录:
- VS2013:C:\Program Files (x86)\Microsoft Visual Studio 12.0
- VS2015:C:\Program Files (x86)\Microsoft Visual Studio 14.0
- VS2017:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional(专业版安装目录)
- VS2019:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional(专业版安装目录)
Visual Studio Installer
VS2017、VS2019使用在线安装,增加了Visual Studio Installer(在开始菜单里面或者下面的路径)
Visual Studio Installer:C:\Program Files (x86)\Microsoft Visual Studio\Installer
语言包:点击 安装 或者 更多-> 修改 找到语言包 选择语言(使用vcpkg需要安装英语)
VSTO:进入Installer,单个组件选项的搜索框,搜索VSTO安装
关于在线安装下载缓慢或者0B/s,可将DNS从114.114.114.114(国内的DNS地址)备用地址改成8.8.8.8或8.8.4.4(谷歌公司的DNS地址)
老版本卸载,从 Releases · microsoft/VisualStudioUninstaller · GitHub
下载Setup.ForcedUninstall.exe,并以管理员运行,输入Y,等待完成...
VS2017、VS2019可通过Visual Studio Installer卸载不同模块
sln编译
脚本编译解决方案,即脚本自动编译sln文件(VS2019无VSxxCOMNTOOLS类似环境变量,需手动指定)
# VS对应的环境变量存在,并不代表已经安装,还得看devenv.exe和devenv.com是否存在
VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
VS120COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
VS2017INSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional
# Visual Studio 2013 (2008 2015类似)
set VCENV="%VS120COMNTOOLS%..\IDE\devenv.com"
# Visual Studio 2017
set VCENV="%VS2017INSTALLDIR%\Common7\IDE\devenv.com"
# 编译解决方案
%VCENV% G:\wesproject\wes-textengine\Src\Text.sln /ReBuild "Debug|x64"
/Out "Window-Debug-x64-log.txt"
# 清理解决方案
%VCENV% G:\wesproject\wes-textengine\Src\Text.sln /Clean "Debug|x64"
/Out "Window-Debug-x64-log.txt"
# 查看帮助
%VCENV% /?
nmake编译
make调用nmake,make.bat如下:
@echo off
if "%1"=="check" GOTO CHECK
if "%1"=="clean" GOTO CLEAN
copy /y Win32\config.h src\config.h
copy /y Win32\unistd.h examples\unistd.h
nmake -f Win32\Makefile.msvc
goto END
:CHECK
nmake -f Win32\Makefile.msvc check
goto END
:CLEAN
nmake -f Win32\Makefile.msvc clean
goto END
:END
Makefile.msvc文件参考https://github.com/erikd/libsamplerate/blob/master/Win32/Makefile.msvc
vs的makefile文件说明
# 引用shell命令,如erase和echo
-@erase -@echo
# 定义变量和引用变量
CPP=cl.exe $(CPP)
# 包含目录 VC目录和WinSDK目录
# - VC目录VS2013包含目录如下:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
# - WinSDK目录WinSDK8.1包含目录如下:
C:\Program Files (x86)\Windows Kits\8.1\Include\um
C:\Program Files (x86)\Windows Kits\8.1\Include\shared
C:\Program Files (x86)\Windows Kits\8.1\Include\winrt
# 库目录 VC目录和WinSDK目录
# - VC目录VS2013库目录如下:
# -- x86
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib
# -- x64
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64
# - WinSDK目录WinSDK8.1包含目录如下:
# -- x86
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86
# -- x64
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64
编译器直接编译
启动cmd,配置编译器cl环境
# VS2013编译器(VS2010和VS2015类似)
call "%VS120COMNTOOLS%"vsvars32.bat
# VS2017编译器
call "%VS2017INSTALLDIR%\Common7\Tools\VsDevCmd.bat"
# VS2019编译器x64架构编译器(若选择x86,可不加后面参数)
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\VsDevCmd.bat" -arch=amd64
编译链接脚本
#
cl /c /I. /Iffmpeg\include /DWIN64 /W3 /WX- /wd4996 /GS /GR /Zi /Od /MDd /EHsc /nologo main.cpp
#
link main.obj /LIBPATH:. /LIBPATH:.\ffmpeg\include /DYNAMICBASE avformat.lib avcodec.lib /DEBUG /MACHINE:X64 /SUBSYSTEM:CONSOLE /PDB:main.pdb /OUT:main.exe
★ 库调试两种方式
1. 启动调试
库工程属性 > 配置属性 > 调试 > 命令
指定运行程序(包含目录和运行程序)
2. 附加调试
菜单 > 调试 > 附加到进程
从列表中指定运行程序,然后附加
★ release下调试四步设置
★ 调试技巧
行号右键可添加条件断点和操作断点(vs2017可以),操作断点输出 {变量名},右键变量可增加值更改中断
调试 > 窗口
模块窗口 - 可查看库名称,加载路径,是否加载符号,以及加载的符号文件,右键可加载符号
堆栈窗口 -
并行堆栈 -
显示诊断工具 -
解决方案资源管理器 > 右键工程 > 选择属性 > 属性页界面(或 主菜单 > 调试 > xxx属性 > 属性页界面)
常规
调试
C/C++
→ 常规
→ 优化
→ 预处理
→ 代码生成
→ 语言
→ 高级
→ 命令行
链接器
→ 常规
→ 输入
→ 调试
→ 系统
→ 高级
也可以新建一张属性表(属性管理器中),设定用户宏,然后可以通过从父集或项目默认设置继承来设置相关项
另外: /DLL /OUT:"*.dll"
手动:/FORCE:MULTIPLE 忽略变量多重定义
获取工具和功能(VS2017以上)
进入Visual Studio Installer
选项(主菜单 > 工具 > 选项 > 工具选项设置界面)
文本编辑器
→ C/C++
调试
→ 符号
(Redistributable)
在VS的安装目录下有个VC/redist目录,里面可以找到运行库(如msvcp120.dll msvcr120.dll)和运行库安装程序
VS相关文件下载网站 https://visualstudio.microsoft.com/zh-hans/downloads/
在网页其他工具和框架可以找到最新Redistributable安装包,点击旧版本链接可找到其他版本Redistributable安装包
安装VS后后,会将相应平台库拷贝到c:\Windows\System32和c:\Windows\SysWOW64目录;
在VS的安装目录下有个Common7/Tools目录下
- errlook.exe 通过 [Visua Studio ->工具->错误查找] 启动 --- 查看GetLastError()错误码描述
- guidgen.exe 通过 [Visua Studio ->工具->创建GUID] 启动 --- 创建GUID
VS2013:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
进入C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts目录,点击相应图标,或执行如下命令:
# VS2013 开发人员命令提示
call "%VS120COMNTOOLS%"VsDevCmd.bat
# VS2013 x86 本机工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86
popd
# VS2013 x64 本机工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat amd64
popd
# VS2013 x64 兼容工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86_amd64
popd
# VS2013 ARM 兼容工具命令提示
pushd "%VS120COMNTOOLS%"..\..\VC
call vcvarsall.bat x86_arm
popd
# 常用
pushd "%VS120COMNTOOLS%"..\..\VC && call vcvarsall.bat x86_amd64 && popd
最后,运行dumpbin、lib和nmake
dumpbin
- 显示COFF格式的文件信息,比如像vc编译器生成的目标文件(obj),可执行文件(exe)和动态链接库(DLLs)等。
# 查看导出接口和依赖库与库接口
dumpbin /exports FreeImage.dll
dumpbin /imports FreeImage.dll
dumpbin /imports FreeImage.exe
# 查看依赖库
dumpbin /dependents FreeImage.dll
# 查看dll和exe是32位还是64位 看FILE HEADER VALUES下一行是x86还是x64
# macos下 lipo -info *.a 或 *.dylib
# ubuntu下 file *.a 查看有无x86-64,表明是否是64位
dumpbin /headers FreeImage.dll
# 若是调试库,还能看到调试的pdb位置
# 查看符号表
# macos下 nm -nm *.dylib
dumpbin /symbols *.lib
# 查看库的公共符号
# 参数1 将按对象顺序显示符号及其偏移量。
# 参数2 将显示对象的偏移量和索引号,然后按字母顺序列出这些符号及每个符号的对象索引
# 若要两个输出都获得,指定不带数字参数
dumpbin /linkermember *.lib
dumpbin /linkermember:1 *.lib
dumpbin /linkermember:2 *.lib
lib
# 判断lib文件对应是静态库还是动态库 结果包含obj则是静态库 结果包含dll则是动态库
lib /list hello.lib
# linux下所有对象文件(.o文件)列表
ar -t hello.a
nmake
- nmake [/f makefile] [targets]
nmake /nologo /s /f makefile.msvc
VAssistX番茄助手
(VS2008)
--- 默认c:\Program Files (x86)\Visual Assist X\目录;
--- 将将VA_X.dll的文件放入目录内;
(VS2012以上)
--- 找到%USERPROFILE%\AppData\Local\Microsoft\VisualStudio目录;
--- 找到VS对应目录,目录有数字代表,比如12代表2013,进入目录找到Extensions目录;
--- 找到其中有几个目录,其中一个含有VA相关文件,将VA_X.dll的文件放入目录内;
Image Watch
--- 自定义natvis文件放在C:\Users\<用户>\Documents\Visual Studio 20xx\visualizers目录
# natvis模板
nasm和yasm
nasm.props、nasm.targets、nasm.xml和yasm.props、yasm.targets、yasm.xml存放路径
Visual Studio 2013: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations
Visual Studio 2015: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations
Visual Studio 2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\BuildCustomizations (VS专业版)
Visual Studio 2019: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations (VS专业版)
nasm.exe和yasm.exe
Visual Studio 2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC
Visual Studio 2019: C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC (x64就放64bit,如何兼容还有待研究)
优化 - release下默认开启优化
VS2013 - 支持大部分c99和c++11,不支持如下:
VS2017
增量链接
启动增量链接编译,每次编译链接的时候为每个函数预留一部分空间, 编译链接时, 只是修改你修改过的函数对应的代码, 其它二进制代码保持不变,跟增量升级一个道理;没启动增量链接编译,把obj删除, 然后重新生成,若在调试得重新开始调试;
sln文件
vs2013,空工程
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
vs2013,添加了一个工程
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "audiodenoise", "audiodenoise\audiodenoise.vcxproj", "{8FED1CA7-C625-4D2E-BECB-34467AFB9936}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|Win32.ActiveCfg = Debug|Win32
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|Win32.Build.0 = Debug|Win32
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|x64.ActiveCfg = Debug|x64
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Debug|x64.Build.0 = Debug|x64
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|Win32.ActiveCfg = Release|Win32
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|Win32.Build.0 = Release|Win32
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|x64.ActiveCfg = Release|x64
{8FED1CA7-C625-4D2E-BECB-34467AFB9936}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
def文件
LIBRARY libsamplerate-0.dll
EXPORTS
src_new @1
src_delete @2
Ctrl+K Ctrl+D 先选中代码,代码格式化
Ctrl+U 先选中代码,小写
Shift+Ctrl+U 先选中代码,大写
Tab 先选中代码,前进一个tab键
Shift+Tab 先选中代码,后退一个tab键
VS2017 Devenv命令行开关
VS2017 Devenv Rebuild
MSVC工具
nmake2017
WIN_VER | 系统版本 |
---|---|
0x500 | Windows 2000 |
0x501 | Windows xp |
0x600 | Windows vista |
0x601 | Windows 7 |
0x0602 | Windows 8 |
0x0A00 | Windows 10 |
名称 | 内部版本(MSVC++) | _MSC_VER |
Visual Studio 2008 | 9.0 | 1500 |
Visual Studio 2010 | 10.0 | 1600 |
Visual Studio 2013 | 12.0 | 1800 |
Visual Studio 2015 | 14.0 | |
Visual Studio 2017 | 15.0 | |
Visual Studio 2019 | 16.0 |