安装产品时,请确保安装其中一个C++工作负载,例如“使用C++进行桌面开发”或“使用C++进行游戏开发”。
之后,您只需运行“打开文件夹”命令并选择要浏览的文件夹(从文件>打开>文件夹或快速启动)或从命令提示符直接启动devenv.exe
打开文件夹后,解决方案资源管理器将立即显示该文件夹中的文件,您可以在编辑器中打开任何文件。在后台,VisualStudio将开始索引文件夹中的C++源代码。
您现在可以访问阅读和浏览C++代码的所有VisualStudio功能(例如,查找所有引用,转到符号,Peek定义,语义着色和突出显示,类视图,调用层次结构等等)。
当您从项目中创建,重命名或删除源文件时,您不必再担心更新VisualC++项目-VisualStudio将依赖于文件夹结构并根据需要监视磁盘上的更改。此外,当您编辑代码时,VisualStudio的IntelliSense将继续更新并帮助您获取源中的最新信息。
根据项目的不同,您可能需要使用有关源代码的更多信息来自定义这些配置,例如其他包含路径,其他定义或编译器开关。为此,在根文件夹中创建一个名为CppProperties.json的文件-该文件将有助于配置C++IntelliSense和浏览。
CppProperties.json:
以下属性可用于给定配置:
此文件支持包含路径和其他属性值的环境变量扩展。语法为${env.FOODIR}以扩展环境变量%FOODIR%。
您还可以访问此文件中的内置宏:
例如,如果您的项目有一个包含文件夹,并且还包含Windows.h和WindowsSDK中的朋友(这很常见),您可能希望使用以下内容更新配置文件:
注意:%WindowsSdkDir%和%VCToolsInstallDir%未设置为全局环境变量,因此请确保从定义这些变量的“VS2017开发人员命令提示符”启动devenv.exe。
提示:通常,错误列表窗口是查看由于缺少包含而导致的任何IntelliSense错误的良好起点-将其内容过滤为“仅限IntelliSense”,错误代码为E1696:
您可以在CppProperties.json文件中创建任意数量的配置,并可以从标准工具栏中的C++配置下拉列表轻松切换它们
CppProperties.json
通过直接在IDE中将它们作为任务运行,您可以在当前工作空间中的文件上自动构建脚本或任何其他外部操作。您可以通过右键单击文件或文件夹来配置新任务,然后选择“自定义任务设置”。
这将在工作区中隐藏的.vs文件夹下创建一个新文件tasks.vs.json,以及一个可以自定义的新任务。
默认情况下,可以从解决方案资源管理器中的文件的上下文菜单执行任务。对于每个任务,您将在上下文菜单的底部找到一个新条目。
Tasks.vs.json
就像CppProperties.json一样,在tasks.vs.json中,您可以使用语法${env.VARIABLE}来使用环境变量。
此外,您可以在任务属性中使用内置宏:
您还可以自己指定可在任务属性中使用的其他用户宏,例如下面示例中的${outDir}:
通过将给定任务的“contextType”指定为“build”,“clean”或“rebuild”,您可以连接可以从上下文菜单调用的Build,Clean和Rebuild的VS内置命令。
您可以通过在“applyTo”字段中指定其名称来为任何文件或文件夹创建任务。但是要创建更多通用任务,您可以使用文件掩码。例如:
要在VisualStudio中开始调试,您需要在解决方案资源管理器中导航到可执行文件。然后右键单击,选择“Debug”-这将立即启动此可执行文件的调试会话。
或者,您可以在任务定义中指定输出二进制文件(通过“输出”)。一旦你这样做,如果你选择源文件作为启动项(右键单击,“设置为启动项”)或只需右键单击源文件并选择“调试”,这个二进制文件将在调试器下自动启动。
如果要自定义程序的参数,请选择“调试和启动设置”。这将创建一个新的launch.vs.json文件,其中包含有关所选程序的信息。
要指定其他参数,只需将它们添加到“args”JSON数组中,如下例所示
launch.vs.json:
保存此文件后,“调试目标”下拉列表中的新条目将可用,您可以选择它以启动调试器。通过编辑launch.vs.json文件,您可以为任意数量的可执行文件创建任意数量的调试配置。如果现在按F5,调试器将启动并命中您可能已设置的任何断点。现在可以使用所有熟悉的调试器窗口和功能。
这种新灵活性的核心在于项目的CppProperties.json文件,它来自两个新概念:
将这些新概念与使用“${env.VAR}”语法在CppProperties.json,launch.vs.json和tasks.vs.json中使用环境变量的现有功能相结合,为创建丰富的开发环境提供了强大的机制。
让我们从一个快速示例开始,说明如何使用此功能:
为了解压缩这个,这个例子定义了使用Microsoft的VisualC++工具链构建的两个配置。x86的第一个构建(因为它继承了“msvc_x86”环境),而另一个构建了x64。它还定义了两个配置使用的环境变量“INCLUDE”(第6行)。
请记住,可以为所有配置,每个配置或两者全局定义“环境”(第4行)和“inheritEnvironments”(第12行和第25行)属性。在上面的示例中,“INCLUDE”变量将是全局变量,“inheritEnvironment”属性将仅适用于每个单独的配置。
今天有以下环境:
特定于配置的环境变量最后被评估,因此它们会覆盖全局变量。以下示例说明了注释中的覆盖行为:
如果环境变量的值是特定于配置的,那么当您在任务或启动配置中包含此任务时,将使用当您尝试运行任务或调试程序时当前所选配置的值:
如果不包括此项,则只有全局定义的变量可用。
您可以在第14行看到可以引用CppProperties.json文件中定义的变量。第17行的“\u0000”是用于分隔变量的空字符。
以下示例显示了如何完成创建自定义命名空间:
您可以使用语法“${special.SpecialVar}”在任何CppProperties,Launch或TasksJSON文件中访问“SpecialVar”,如第32行所示。
Togetstartedwiththiscreateafilemain.cppinafolderonyourPC,addthesourcebelowtoitandopenthefolderinVS.
#includeintmain(){ std::cout<<"Hello"<
{"configurations":[{"inheritEnvironments":["linux_x64"],"name":"Linux-x64","includePath":["${env.INCLUDE}"],"defines":[]}]}IntheSolutionExplorerrightclickmain.cppandchooseConfigureTasks.Inthetasks.vs.jsonfilethatopensmodifythetaskasfollows.Thistaskwillcopythedirectorytotheremotemachinespecified,thenrun“g++main.cpp”inthedirectoryspecified.
{"version":"0.2.1","tasks":[{"taskName":"Build","appliesTo":"main.cpp","type":"remote","contextType":"build","command":"g++main.cpp","remoteMachineName":"ubuntu","remoteCopyDirectory":"~/sample","remoteCopyMethod":"sftp","remoteWorkingDirectory":"~/sample/hello","remoteCopySourcesOutputVerbosity":"Verbose"}]}Youcanrunthistaskbyrightclickingmain.cppintheSolutionExplorerandselectingBuild.TheOutputwindowwillshowthefilecopyresults.Thereisnooutputfromthiscompilecommand,unlessyouhaveanerror.
Thefieldtypeiswherewecanchangethecontextofthetypetorunontheremotemachine,commandiswhatwillbeexecutedthere.Thecontexttypebuildplacesthiscommandintothatareaofthecontextmenuforthefilethetaskappliesto.ThefieldremoteMachineNameneedstomatchadefinedconnectionintheVisualStudioConnectionManager.YoucanfindthatintheQuickLaunch(Ctrl+Q)bytypingConnectionManager,orunderTools>Options>CrossPlatform>ConnectionManager.NotethatyoucanspecifydifferentdirectoriesforwheretocopyfilesvswheretoruncommandswiththefieldsremoteCopyDirectoyandremoteWorkingDirectory.WhenthefilesarecopiedtheyarecopiedintoafolderofthesamenameasthefolderyouhaveopeninVisualStudioatthelocationspecified.Bydefaultcommandsareexecutedinyourhomedirectoryontheremotesystem.Youcanalsospecifythemethodyouwanttouseforcopying,sftp,rsyncornonetodisable.Thersyncmethodisrecommendedforlargeprojects.TheremoteCopySourcesOutputVerbosityoptionisnotnecessarybutisusefultoknowaboutifyouaretryingtodiagnoseanissue.
Youcandoanythingyoulikewithremotetasksofcourse.Toruntheoutputofourfirstcommandabove,addanothertaskaftertheoneabove.
{"taskName":"Run","appliesTo":"main.cpp","type":"remote","command":"./a.out","remoteMachineName":"localhost","remoteWorkingDirectory":"~/sample/hello","remoteCopySourcesOutputVerbosity":"Verbose"}Thistaskwillshowupas“Run”atthebottomofthecontextmenuwhenyouselectmain.cppintheSolutionExplorer.Whenexecuted,afteryouhavecompiled,youshouldsee“Hello”intheoutputwindow.
Thisisaverysimpleexampleofthisnewfeature.Welookforwardtohearingabouthowyouareusingitinyourprojects.