visauvisual studio可以运行c语言吗 的c++编译功能问题?


项目
03/09/2023
可以使用 Visual Studio 编辑、编译和生成任何具有完整 IntelliSense 支持的 C++ 基本代码,而无需将该代码转换为 Visual Studio 项目或使用 MSVC 工具集进行编译。 例如,可以在 Windows 计算机上的 Visual Studio 中编辑跨平台 CMake 项目,然后在远程 Linux 计算机上使用 g++ 针对 Linux 编译该项目。C++ 编译生成 C++ 程序意味着要从一个或多个文件编译源代码,然后将这些文件链接到可执行文件 (.exe)、动态加载库 (.dll) 或静态库 (.lib) 中。基本 C++ 编译涉及三个主要步骤:C++ 预处理器会转换每个源文件中的所有 #directives 和宏定义。 这会创建翻译单元。
C++ 编译器通过应用已设置的任何编译器选项,将每个翻译单元编译为对象文件 (.obj)。
链接器通过应用已设置的链接器选项,将对象文件合并为单个可执行文件。
MSVC 工具集Microsoft C++ 编译器、链接器、标准库和相关实用工具组成了 MSVC 编译器工具集(也称为工具链或“生成工具”)。 这些内容包含在 Visual Studio 中。 你还可以作为免费的独立包下载并使用命令行工具集。 有关详细信息,请参阅 Visual Studio 下载页面上的 Visual Studio 生成工具。可以通过从命令行直接调用 MSVC 编译器 (cl.exe) 来生成简单程序。 以下命令接受单个源代码文件,并调用 cl.exe 以生成名为 hello.exe 的可执行文件:cl /EHsc hello.cpp
编译器 (cl.exe) 在此处会自动调用 C++ 预处理器和链接器以生成最终输出文件。 有关详细信息,请参阅在命令行上生成。生成系统和项目大多数实际程序使用某种类型的生成系统来管理针对多个配置(调试和发布)、多个平台(x86、x64、ARM 等)、自定义生成步骤甚至是必须按特定顺序编译的多个可执行文件编译多个源文件的复杂性。 可在生成配置文件中进行设置,生成系统会在调用编译器之前接受该文件作为输入。 生成可执行文件所需的一组源代码文件和生成配置文件称为项目。以下列表显示 Visual Studio 项目的各种选项 - C++:使用 Visual Studio IDE 创建 Visual Studio 项目,并使用属性页进行配置。 Visual Studio 项目生成在 Windows 上运行的程序。 有关概述,请参阅 Visual Studio 文档中的编译和生成。
打开包含 CMakeLists.txt 文件的文件夹。 CMake 支持已集成到 Visual Studio 中。 可以使用 IDE 进行编辑、测试和调试,而无需以任何方式修改 CMake 文件。 这使你可以与可能使用不同编辑器的其他人一起处理相同的 CMake 项目。 CMake 是用于跨平台开发的建议方法。 有关详细信息,请参阅 CMake 项目。
打开源文件的松散文件夹(不包含任何项目文件)。 Visual Studio 将使用启发式生成文件。 这是一种用于编译和运行小型控制台应用程序的方法。 有关详细信息,请参阅“打开文件夹”项目。
打开包含生成文件的文件夹或任何其他生成系统配置文件。 可以通过将 JSON 文件添加到文件夹中,将 Visual Studio 配置为调用任意生成命令。 有关详细信息,请参阅“打开文件夹”项目。
在 Visual Studio 中,打开 Windows 生成文件。 有关详细信息,请参阅 NMAKE 参考。
命令行中的 MSBuild可以通过向 MSBuild 传递 .vcxproj 文件以及命令行选项,从命令行调用它。 此方法需要充分了解 MSBuild,建议仅在必要时才使用。 有关详细信息,请参阅 MSBuild。本节内容Visual Studio 项目如何使用其本机生成系统 (MSBuild) 在 Visual Studio 中创建、配置和生成 C++ 项目。CMake 项目如何在 Visual Studio 中编码、生成和部署 CMake 项目。打开文件夹项目如何使用 Visual Studio 基于任意生成系统或完全不基于任何生成系统来编码、生成和部署 C++ 项目。发行版本如何创建优化发行版本并进行故障排除以部署到最终用户。通过命令行使用 MSVC 工具集讨论如何直接从命令行使用 C/C++ 编译器和生成工具(而不是使用 Visual Studio IDE)。在 Visual Studio 中生成 DLL如何在 Visual Studio 中创建、调试和部署 C/C++ DLL(共享库)。演练:创建和使用静态库如何创建 .lib 二进制文件。生成 C/C++ 独立应用程序和并行程序集描述了适用于 Windows 桌面应用程序的部署模型,这一模型的理论基础是独立应用程序和并行程序集。针对 64 位 x64 目标配置 C++ 项目如何使用 MSVC 生成工具来面向 64 位 x64 硬件。将 C++ 项目配置为可用于 ARM 处理器如何使用 MSVC 生成工具来面向 ARM 硬件。优化代码如何以各种方式优化代码,包括按程序优化。配置适用于 Windows XP 的程序如何使用 MSVC 生成工具来面向 Windows XP。C/C++ 生成参考提供指向有关使用 C++ 生成程序、编译器和链接器选项以及各种生成工具的参考文章的链接。
前言作为一个快捷、跨平台的IDE除了资源占用比较大,其他真没啥硬伤。比较适合方便轻量级开发,如以工程形式打开文件夹:这样就不必为了一个“hello world”新建工程了。而且,它的智能提示和对调试器的集成真的很不错。虽然vs也可以,甚至做的更好,但不能跨平台。关于VS Code完整的介绍请参考官方文档,这里只介绍本人在使用过程中遇到的关键的问题点。总结一下对IDE的“关键”要求:智能提示 (c_cpp_properties.json)编译 (tasks.json)调试 (launch.json)开发环境配置(settings.json)如果已经安装了Visual studio,那么真的没必要使用vs code,后者除了体积小,也没其他拿得出手的优点了。而且,你不会想着拿vs code做MFC开发吧?如果使用Linux系统,也可以跳过这节。就是Windows下使用集成gcc的开发环境需要折腾一番。在Windows下常见的第三方集成了GCC的开发环境有MSYS2、Cygwin、Windows Subsystem for Linux(后面简称WSL),对于这类开发环境,需要将其集成到VS code的终端窗口中。我本人是使用WSL多一些,偶尔使用MSYS2,多年未再使用Cygwin,所以就以WSL、MSYS2为例来介绍。不建议修改全局配置,我们在.vscode下新建settings.json文件(也可以通过快捷键Ctrl+, ,然后选择workspace settings来生成)WSL:{
"terminal.integrated.shell.windows": "bash.exe"
}
上面的"bash.exe"用不着全路径的,因为它一般就在windows/system32这个系统路径下bash.exe不在系统路径下,就要补全它的路径,但它一般都在windows/system32路径下。
更新现在可以通过安装Remote-WSL插件来简化WSL环境下的开发。选择在wsl下重新打开文件夹:选择 Terminal > Configure Default Build Task 后,会显示系统检测到的编译器。
记得把工程中原来的.vscode文件夹删除掉。
MSYS2,使用下面的方式集成,可参考How do I integrate MSYS2 shell into Visual studio code on Window?:
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"],
"terminal.integrated.env.windows":
{
"MSYSTEM": "MINGW64",
"CHERE_INVOKING":"1"
}
智能提示 (c_cpp_properties.json)从个人使用IDE的经验(visual slickedit、visual studio、codelite、codeblock之类),只要将头文件路径配置好就行了。但是VS Code的配置方法跟之前的IDE有点区别,只提供配置文件(做的小也有不方便的地方)。如果文件夹下的.vscode目录下没有c_cpp_properties.json这个文件,从View菜单或者快捷键(Ctrl+Shift+P)打开命令面板,选择:C/Cpp: Edit configurations,会新建一个。我们要做的就是把需要包含的头文件路径配置上。配置文件是json格式的,下面拿windows 10 下 WSL (Windows Subsystem for Linux) 的配置为示范:{
"configurations": [
{
"name": "WSL",
"includePath": [
"${workspaceFolder}/**",
"C:/Users/[yourname]/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc/LocalState/rootfs/usr/include/**"
],
"defines": ["__linux__", "__x86_64__" ],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": ["C:/Users/[yourname]/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc/LocalState/rootfs/usr/include/**"],
"limitSymbolsToIncludedHeaders": false
}
}
],
"version": 4
}
compilerPath将会为智能提示引擎提供编译器内置的头文件路径,比如标准库:**“includePath”**配置项就是智能提示的非编译器指定包含路径的头文件搜索路径/** 表示递归该路径"C:/Users/[yourname]/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc/LocalState/rootfs"是安装的ubuntu18.04(WSL, Windows Subsystem For Linux)的系统路径。也可以参考官方的WSL集成介绍但我觉得没必要那么麻烦。但如果你只使用C,请老老实实按照文档介绍过滤掉C++的头文件。如果安装的WSL不是ubuntu 18.04,该文档也给出来了查找方法,使用powershell:PS R:\> ($(get-appxpackage).PackageFamilyName
findstr /i 'SUSE Ubuntu') -replace '^', "$`{localappdata`}/Packages/"
${localappdata}/Packages/CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
${localappdata}/Packages/46932SUSE.openSUSELeap42.2_022rs5jcyhyac
${localappdata}/Packages/46932SUSE.SUSELinuxEnterpriseServer12SP2_022rs5jcyhyac
关于该配置项更详细的介绍,请参考c_cpp_properties.json Reference Guide
更新目前vscode已经不需要指定wsl中编译器的绝对路径了(其实wsl2整个就是个精简的hyper-v镜像,也不存在直接的路径),默认生成的配置文件如下:{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
编译 (tasks.json)编译的默认快捷键是ctrl+shift+b,vs code通过task.json配置来执行编译过程,配置的要点就是找到能运行的命令。个人将其分为两大类:本机编译器,特点是输入路径就能运行,最简单的情况就是Linux下的GCC虚拟编译器,需要进入环境才能运行,如WSL
命令不仅仅指gcc、g++、cl这些编译器,vs code只是提供了一个执行命令的模板,事实上它不关系你执行什么命令。开发者可以自己编写Makefile,使用make当作模板中的命令参数。你也可以给自己配置个先播放一段音乐再执行编译的task.json。
如果安装了cl(visual studio,微软本家的C++编译器),默认的c_cpp_properties.json内容大致如下(vs2017):{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath":
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
"cStandard": "c11",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
先介绍下MSYS2环境下编译工具链的安装(我自己也老忘记)。从sourceforge下载安装包,一路next安装 gcc、gdb 、make
安装: pacman -S mingw-w64-x86_64-gcc查找GCC的相关软件包:pacman -Sl
grep 软件包名称:如gcc
WSL ( windows subsystem for linux )当在写这篇文章的时候,VS Code的C++插件已经支持WSL了,我们只需要按照前一节《集成终端窗口》将bash集成到vs code,剩下的事就跟Linux下直接使用gcc没多大区别了,可以参考: 官方解惑 {
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "wsl build",
"type": "shell",
"command": "g++",
"args": [
"hello_vscode.cpp", "-g",
"-o",
"hello"
],
"group": {
"isDefault": false,
"kind": "build"
},
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$gcc"
}
]
}
如果使用GCC编译器,Linux以及Windows下的WSL和Msys2的编译配置没什么不同,都可以使用上述配置为模板
调试 (launch.json)如果没有配置调试,会提示你新建一个。先从Linux系统下的配置入手,因为它最为简单,下面就是程序自动生成的模板,通常我们只需要替换program字段就可以了:{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
相比智能提示、编译,Windows下使用GDB调试的配置要麻烦一些。调试器要根据符号表中的路径去寻找对应源文件,使用msys2或者wsl,就要注意他们对路径的表示是不同的。
MSYS2:/[盘符]/[路径], 如c:\test,表示为:/c/testWSL(ubuntu): /mnt/[盘符]/,对于c:\test,表示为:/mnt/c/test
MSYS2 环境配置文件{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/test.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [
],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:/msys64/usr/bin/gdb.exe",
"launchCompleteCommand": "exec-run",
"sourceFileMap": {
"/d/": "d:/"
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
WSL 环境配置文件(Windows SubSystem for Linux){
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/mnt/d/code/cpp_blog/hello",
"args": [],
"stopAtEntry": false,
"cwd": "/mnt/d/code/cpp_blog",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "c:\\windows\\system32\\bash.exe",
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/d/": "d:\\"
}
}
]
}
更新目前的版本不用这么麻烦了,Run > Add Configuration… 然后选择 C++ (GDB/LLDB)生成的launch.json基本可以直接使用了。但是注意,如果WSL系统中没有安装GDB,这个配置文件的相关设置就会缺失。{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
vs code的调试界面集成度很高,可以在调试控制台执行调试命令,界面看着也舒服
sourceFileMap:它将编译时的路径映射为本地路径。比如,这个工程目录为:d:\code\cpp_msys2,源文件为:hello_vscode.cpp,如果没有这个配置,会出现下面的错误:Unable to open ‘hello_vscode.cpp’: File not found (file:///d/code/cpp_msys2/hello_vscode.cpp).参考Debug error “Unable to ‘…’: File not Found”miDebuggerPath:如果把调试器纳入系统路径,那么是不需要指定全路径的externalConsole:因为前面已经把bash集成到了控制台,所以这个选项要给false,否则会有如下类似的错误:ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run”. During startup program exited with code 0xc0000135.对于调试配置文件的完整介绍可参考Configuring launch.json for C/C++ debugging总结一下
VS Code跨平台、体积小、插件丰富、功能强大但配置也麻烦VS Code 体积小,但占用资源可不比任何IDE落后(clion除外)(当然,都比不上微信开发者工具,动不动2GB+内存占用)VS Code的智能提示的强大、稳定、速度只是比VS差点,但比其他IDE不差(比如:codelite、codeblock、slickedit、clion)负责VS Code的发布程序员心情一直不好,因为会出现Linux下32位系统安装程序给你安装64位插件集、Windows下自动升级删除原程序后又提示找不到程序的低级BUG,而且长期就这德行(现在已经改好了)vscode的官方文档现在也很有条理了,由于这款工具不停更新,如果要深入了解或者紧跟微软步伐,还是得参考。

项目
06/16/2023
作为 Visual Studio 集成开发环境 (IDE) 的一部分,Microsoft C++ (MSVC) 共享许多与其他语言相同的窗口和工具。 其中许多窗口和工具(包括“解决方案资源管理器”、“代码编辑器”和“调试器”)都记录在 Visual Studio IDE 下
。 通常情况下,相比为其他语言提供的功能集,共享的工具或窗口为 C++ 提供的功能集略有不同。 一些窗口或工具仅在 Visual Studio Professional 或 Visual Studio Enterprise 版本中可用。除了 Visual Studio IDE 中的共享工具之外,MSVC 还有几种专门用于本机代码开发的工具。 这些工具也会在本文中列出。 有关每个版本的 Visual Studio 可用的工具列表,请参阅 Visual Studio 版本中的 C++ 工具和功能。创建项目项目基本上就是一组内置于可执行程序或库中的源代码文件和资源(例如图像或数据文件)。Visual Studio 可支持要使用的任何项目系统或自定义生成工具,且完全支持 IntelliSense、浏览和调试:MSBuild 是 Visual Studio 的本机项目系统。 从主菜单中选择“文件”
>“新建”
>“项目”
时,你可以看到多种 MSBuild 项目模板
,可帮助你快速开始开发不同类型的 C++ 应用程序。
一般情况下,除非使用现有的 CMake 项目,或使用其他项目系统,否则应将这些模板用于新项目。 有关详细信息,请参阅创建和管理基于 MSBuild 的项目。
CMake 是一个跨平台生成系统,在安装使用 C++ 的桌面开发负载时集成在 Visual Studio IDE 中。 可将 CMake 项目模板用于新项目,或直接打开包含 CMakeLists.txt 文件的文件夹。 有关详细信息,请参阅 Visual Studio 中的 CMake 项目。
通过“打开文件夹”功能,支持任何其他 C++ 生成系统,包括松散的文件集合。 创建简单的 JSON 文件来调用生成程序并配置调试会话。 有关详细信息,请参阅 C++ 的“打开文件夹”项目。
添加到源控件通过源控件,可让你协调多个开发人员的工作,将正在进行中的工作与生产代码隔离并备份源代码。 Visual Studio 通过其“团队资源管理器”窗口支持 Git 和 Team Foundation 版本控制 (TFVC)。有关 Azure 中 Git 与存储库集成的详细信息,请参阅与 Azure Repos 和 Visual Studio 共享代码。 有关 Git 与 GitHub 集成的信息,请参阅Visual Studio 和 GitHub:结合使用效果更佳。获取库使用 vcpkg 包管理器获取并安装第三方库。 目录中当前提供超过 1700 个开源库包。如果你的程序包含用户界面,则可以使用设计器为其快速填充按钮和列表框等控件。 从工具箱窗口拖动控件并将其放到设计图面上时,Visual Studio 会生成使其正常运行所需的资源和代码。 然后,你编写代码来自定义外观和行为。有关设计通用 Windows 平台应用用户界面的详细信息,请参阅设计和 UI。有关为 MFC 应用程序创建用户界面的详细信息,请参阅 MFC 桌面应用程序。 有关 Win32 Windows 程序的信息,请参阅 Windows 桌面应用程序。编写代码创建项目后,所有项目文件将都显示在“解决方案资源管理器”窗口中
。 (
解决方案是用于一个或多个相关项目的逻辑容器。)单击解决方案资源管理器中的 .h 或 .cpp 文件时,该文件将在代码编辑器中打开
。代码编辑器是专用于 C++ 源代码的字处理器。 它会以不同的颜色标记语言关键字、方法和变量名以及代码的其他元素,使代码更具可读性且更易于理解。 它还提供用于重构代码、在不同文件之间导航以及理解代码结构的工具。 有关详细信息,请参阅编写和重构代码。添加和编辑资源Windows 程序或 DLL 通常会包括一些资源,例如对话框、图标、图像、可本地化的字符串、初始屏幕、数据库连接字符串或任意数据
。 Visual Studio 包括用于添加和编辑资源的工具。 有关详细信息,请参阅使用资源文件。要编译和链接项目,请在菜单栏选择“生成”>“生成解决方案”,或按组合键 Ctrl+Shift+B
。 将在“错误列表”中报告生成错误和警告(Ctrl+\、Ctrl+E)。 “输出”窗口 (Alt+2) 显示生成过程的相关信息
。有关配置生成的详细信息,请参阅使用项目属性和项目与生成系统。还可以直接从命令行使用编译器 (cl.exe) 和许多其他与生成相关的独立工具(如 NMAKE 和 LIB)。 有关详细信息,请参阅在命令行上生成 C/C++ 代码以及 C/C++ 生成参考。调试你可以通过按 F5 键开始调试。 执行会在你设置的任何断点暂停(按 F9)
。 你也可以一次一行地逐步执行代码 (F10)、查看变量或寄存器的值,某些情况下甚至可在代码中进行更改并继续调试,而无需重新编译。 下图显示了一个在断点处停止执行的调试会话。 数据结构成员的值显示在“监视窗口”中
。有关详细信息,请参阅使用 Visual Studio 进行调试。测试Visual Studio 包含适用于 C++ 的 Microsoft 单元测试框架,以及对 Boost.Test、Google Test 和 CTest 的支持。 从“测试资源管理器”窗口运行测试
:有关详细信息,请参阅使用单元测试验证代码和在 Visual Studio 中为 C/C++ 编写单元测试。分析Visual Studio 包含可以在源代码中检测潜在问题的静态代码分析工具。 这些工具包括 C++ Core Guidelines 规则检查器的实现。 有关详细信息,请参阅 C/C++ 代码分析概述。部署已完成的应用程序你可以通过 Microsoft Store 将传统桌面应用程序和 UWP 应用部署到客户。 将在后台自动处理 CRT 的部署。 有关详细信息,请参阅发布 Windows 应用和游戏。你还可以将本机 C++ 桌面部署到其他计算机。 有关详细信息,请参阅部署桌面应用程序。有关部署 C++/CLI 程序的详细信息,请参阅面向开发人员的部署指南。后续步骤查看下述一篇介绍性的文章,进一步了解 Visual Studio:

我要回帖

更多关于 visual studio可以运行c语言吗 的文章

 

随机推荐