====== C/C++ in Visual Studio Code ======
===== Windows =====
==== launch.json & tasks.json ====
{
// 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": "C (clang)",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "lldb",
"setupCommands": [],
"preLaunchTask": "C (clang)"
},
{
"name": "C++ (clang++)",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"miDebuggerPath": "lldb",
"setupCommands": [],
"preLaunchTask": "C++ (clang++)"
},
{
"name": "C/C++ (cl)",
"type": "cppvsdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"console": "integratedTerminal",
"preLaunchTask": "C/C++ (cl)"
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "C (clang)",
"type": "cppbuild",
"command": "clang",
"args": [
"-fcolor-diagnostics",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "C (clang)"
},
{
"label": "C++ (clang++)",
"type": "cppbuild",
"command": "clang++",
"args": [
"-fcolor-diagnostics",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "C++ (clang++)"
},
{
"label": "C/C++ (cl)",
"type": "shell",
"command": "${workspaceFolder}/.vscode/build.ps1",
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe:",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"${file}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "C/C++ (cl)"
}
]
}
==== LLVM/Clang ====
[[https://code.visualstudio.com/docs/cpp/config-mingw]]
mehr infos bezüglich msys2: [[https://msys2.org/]]
für folgende PowerShell Kommandos werden Admin Rechte benötigt
# install msys2
winget install -e --id msys2.msys2
# open clang environment of msys2 (new window)
C:/msys64/msys2_shell.cmd -clang64
pacman -Syu
# confirm with Y (window will close) and repeat:
C:/msys64/msys2_shell.cmd -clang64
pacman -Syu
# install clang toolchain (just choose all)
pacman -S --needed base-devel mingw-w64-clang-x86_64-toolchain
# when up to date, close window/exit with ctrl+d
# update windows path
$msys2Path = "C:\msys64\clang64\bin"
$envTargetMachine = [System.EnvironmentVariableTarget]::Machine
$envPath = [System.Environment]::GetEnvironmentVariable("Path", $envTargetMachine)
$envPathList = [System.Collections.Generic.List[string]]::new($envPath.Trim(";").Split(";"))
$envPathList.Add($msys2Path)
$envPath = [string]::Join(";", $envPathList) + ";"
[System.Environment]::SetEnvironmentVariable("Path", $envPath, $envTargetMachine)
{
"configurations": [
{
"name": "Win32",
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:/msys64/clang64/bin/clang++.exe",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "windows-clang-x64"
}
],
"version": 4
}
==== GCC ====
...
==== MSVC ====
[[https://code.visualstudio.com/docs/cpp/config-msvc]]
* **C/C++ Extension** installieren
* **VS Build Tools** installieren ([[https://visualstudio.microsoft.com/downloads/|Visual Studio Downloads]])
* //automatisch//: Visual Studio installieren und Workload **Desktop development with C++** im Visual Studio Installer auswählen
* //manuell//: Tools for Visual Studio > Build Tools for Visual Studio installieren
* Projekt/Verzeichnis in VS Code öffnen > Terminal > **Configure Default Build Task** > cl.exe auswählen
* **tasks.json** und **launch.json** wie oben gezeigt anpassen
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22000.0",
"compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
$ErrorActionPreference = "Stop"
$VSPath = "C:/Program Files/Microsoft Visual Studio/2022/Community"
Import-Module "$VSPath/Common7/Tools/Microsoft.VisualStudio.DevShell.dll"
Enter-VsDevShell -VsInstallPath $VSPath
$command = "cl"
foreach ($arg in $args) { $command += " `"$arg`"" }
Write-Host "Build Command: `n$command`n"
Invoke-Expression $command