安装
软件下载关联地址(老版本要求登录,新版本是在线安装)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编译
脚本编译ag真人游戏的解决方案,即脚本自动编译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"
# 编译ag真人游戏的解决方案
%vcenv% g:\wesproject\wes-textengine\src\text.sln /rebuild "debug|x64"
/out "window-debug-x64-log.txt"
# 清理ag真人游戏的解决方案
%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下调试四步设置
- c/c --> 常规 --> 调试信息格式 --> 程序数据库 (/zi) ;
- c/c --> 常规 --> 优化 --> 优化 --> 已禁用 (/od);
- 链接器 --> 常规--> 启动增量链接 --> 是 (/incremental);
- 链接器 --> 调试 --> 生成调试信息 --> 生成调试信息 (/debug)。
调试技巧
行号右键可添加条件断点和操作断点(vs2017可以),操作断点输出 {变量名},右键变量可增加值更改中断
调试 > 窗口
模块窗口 - 可查看库名称,加载路径,是否加载符号,以及加载的符号文件,右键可加载符号
堆栈窗口 -
并行堆栈 -
显示诊断工具 -
设置
工程属性
ag真人游戏的解决方案资源管理器 > 右键工程 > 选择属性 > 属性页界面(或 主菜单 > 调试 > xxx属性 > 属性页界面)
常规
- 输出目录 $(outdir)
- 中间目录 $(intdir)
- 目标文件名 $(targetname)
- 目标文件扩展名 $(targetext)
- 生成日志文件 编译链接命令日志
- 平台工具集 visual studio 2013 (v120)
调试
- 命令 启动程序全路径
- 命令参数 程序启动参数
- 工作目录 默认$(projectdir),通常修改为$(outdir)
- 环境 path=$(qtdir)\bin;$(path)或path=$(qtdir)\bin;$(path)
c/c
→ 常规
- 附加包含目录 /i[路径]
- 调试信息格式 /zi 常用
- 警告等级 /w0 - /w4 /wall ide的默认/w3命令行默认/w1,/w禁止显示所有警告,/wall显示所有警告
- 将警告视为错误 /wx-
- 多处理编译 /mp
→ 优化
- 优化 /od /o1 /o2 /ox 禁止 大小最小化 速度最小化 完全优化
→ 预处理
- 预处理器定义 /d "_debug"
→ 代码生成
- 启动c 异常 /ehsc 同步异常处理模型
- 运行库 /mdd /md /mtd /mt
- 结构成员对齐 /zp[数字]
- 启用增强指令集
- 浮点模型 /fp:precise
→ 语言
- 将wchar_t视为内置类型 /zc:wchar_t /zc:wchar_t-
- 启动运行时类型信息 /gr[-] 启动rtti(主要用于typeid和dymatic_cast)
- c 语言标准 /std:c 14 /std:c 17 /std:c latest vs2017以上
→ 高级
- 调用约定 __cdecl (/gd) __stdcall (/gz)
- 编译为 编译为 c 代码 (/tc) 编译为 c 代码 (/tp)
- 禁用特定警告 /wd[数字]
→ 命令行
- /source-charset:utf-8 指定原代码编码 (vs 2015 update 2以上)
- /execution-charset:utf-8 指定执行文件编码 (vs 2015 update 2以上)
- /utf-8 同时指定原代码编码和执行文件编码(vs 2015 update 2以上)
链接器
→ 常规
- 启动增量链接 /incremental或者 /incremental:no(对应生成同名*.ilk文件)
- 附加库目录 /libpath:"<目录>"
→ 输入
- 附加依赖项 "*.lib"
- 模块定义文件 /def:"*.def" (动态库需要导出的接口)
→ 调试
- 生成调试信息 /debug 或者没有
- 生成程序数据库文件 /pdb:""
→ 系统
- 子系统 /subsystem:console 或 /subsystem:windows
- 堆栈保留大小 /stack:"2000000" 默认1mb
→ 高级
- 导入库 /implib:"<生成导入库lib的路径>"
- 目标计算机 /machine:x86或者/machine:x64
也可以新建一张属性表(属性管理器中),设定用户宏,然后可以通过从父集或项目默认设置继承来设置相关项
另外: /dll /out:"*.dll"
手动:/force:multiple 忽略变量多重定义
工具菜单
获取工具和功能(vs2017以上)
进入visual studio installer
选项(主菜单 > 工具 > 选项 > 工具选项设置界面)
文本编辑器
→ c/c
- 常规 - 行号
- 滚动条 - 使用垂直滚动条的缩略图模式
调试
→ 符号
- 可以指定pdb搜索目录,默认会自动搜索dll库所在目录的位置
工具
发行组件
(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
vc工具
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]
- /? 帮助信息
- /s 取消显示已执行的命令
- /p 显示 nmake 信息
- /nologo 不显示ag真人试玩娱乐的版权和版本号
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下默认开启优化
- assert会被跳过不执行;
支持标准
vs2013 - 支持大部分c99和c 11,不支持如下:
- 关键字inline,c不支持c99的inline,需用__line代替,但cpp支持;
- 关键字restrict,c不支持;
- 关键字explicit,cpp不支持c 11的explicit;
- 支持char16_t、char32_t、u16string和u32string,但不支持u"xxx"和u"xxx"
vs2017
- 支持u"xxx"和u"xxx"
宏定义
- win32
- __cplusplus
- winver
名词解释
增量链接
启动增量链接编译,每次编译链接的时候为每个函数预留一部分空间, 编译链接时, 只是修改你修改过的函数对应的代码, 其它二进制代码保持不变,跟增量升级一个道理;没启动增量链接编译,把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 |