Visual Studio使用技巧

记录Visual Studio的一些使用技巧,包括创建Snipplet、一些常见错误的解决方案和使用命令行编译的相关方法。

重定向源码路径

  1. 调试
    为了能够顺利进行调试,将 工程属性-调试-工作目录 设为新的目录
  2. 添加文件
    默认的右键工程目录添加文件并不好用,因为每次总是给定*$(SolutionDir)$(ProjectName)*下的一个地址,因此可以使用插件Add New File,只需要Shift+F2即可

出现符号未定义或者符号重定义的情况

这是正常现象,重生成清理都没有用,正确方法是讲涉及的文件移出工程再重新添加即可,一般这种原因是某个函数所声明的h文件曾经被rename过。

使用MSBuild编译C++代码

使用命令行编译可以使用MSBuild直接构建vcxproj文件,也可以使用VCVARS32.bat来运行传统的Makefile文件

命令行常见选项及意义

目录

OutDir

这是输出目录,包含ilk、pdb文件的所在地。对应于VS中的常规-输出目录。建议和OutputFile的目录相同,否则会出一个warning。
这应当在PropertyGroup选项中配置。默认值为$(SolutionDir)$(Platform)\$(Configuration)\,例

1
2
3
4
5
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>../bin/</OutDir>
<IntDir>../bin/obj/</IntDir>
</PropertyGroup>

IntDir

这是编译器生成的obj以及log文件的所在地。对应于VS中的常规-中间目录。
这应当在和OutDir相同的地方配置。默认值为$(Platform)\$(Configuration)\,例同上

OutputFile

这就是最终生成的exe文件名字。对应于VS中的链接器-常规-输出文件选项。
这应当在ItemDefinitionGroup-Link选项中配置。默认值为$(OutDir)$(TargetName)$(TargetExt),例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>%boost_dir%;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>%boost_dir%\stage\lib;%boost_dir%\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<OutputFile>../bin/$(TargetName)$(TargetExt)</OutputFile>
</Link>
</ItemDefinitionGroup>

LocalDebuggerCommandArguments

为了能够让IDE兼容我们的编译结果,我们需要同时修改IDE的配置选项。
这个是在IDE中用来调试的命令行,其默认值为$(TargetPath),也就等于生成的exe的位置

LocalDebuggerWorkingDirectory