Editor Visual Studio Code dari Microsoft cukup bagus, tetapi tidak memiliki dukungan default untuk membangun proyek C ++.
Bagaimana cara mengkonfigurasinya untuk melakukan ini?
Editor Visual Studio Code dari Microsoft cukup bagus, tetapi tidak memiliki dukungan default untuk membangun proyek C ++.
Bagaimana cara mengkonfigurasinya untuk melakukan ini?
Jawaban:
Ada banyak cara yang lebih mudah untuk mengkompilasi dan menjalankan kode C ++, tidak diperlukan konfigurasi:
Ctrl+Alt+N
, atau tekan F1
lalu pilih / ketik Run Code
, atau klik kanan Editor Teks dan kemudian klik Run Code
dalam menu konteks, kode akan dikompilasi dan dijalankan, dan output akan ditampilkan di Jendela Keluaran.Selain itu Anda dapat memperbarui konfigurasi di settings.json menggunakan berbagai kompiler C ++ seperti yang Anda inginkan, konfigurasi default untuk C ++ adalah seperti di bawah ini:
"code-runner.executorMap": {
"cpp": "g++ $fullFileName && ./a.out"
}
running blablabla
. Tidak ada prompt, tidak ada. Bagaimana cara saya menghentikan kode?
Ctrl+Alt+M
. Untuk menggunakan stdin untuk membaca data, Anda bisa pergi ke File
-> Preference
-> Settings
untuk mengatur "code-runner.runInTerminal": true
. Untuk detail lebih lanjut, Anda dapat merujuk ke github.com/formulahendry/vscode-code-runner/issues/91
Tugas pembangunan adalah spesifik proyek. Untuk membuat proyek baru, buka direktori dalam Visual Studio Code.
Mengikuti instruksi di sini , tekan Ctrl+ Shift+ P, ketik Configure Tasks
, pilih dan tekan Enter.
File task.json akan dibuka. Tempel skrip build berikut ke dalam file, dan simpan:
{
"version": "0.1.0",
"command": "make",
"isShellCommand": true,
"tasks": [
{
"taskName": "Makefile",
// Make this the default build command.
"isBuildCommand": true,
// Show the output window only if unrecognized errors occur.
"showOutput": "always",
// Pass 'all' as the build target
"args": ["all"],
// Use the standard less compilation problem matcher.
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
Sekarang buka menu File → Preferences → Shortcuts Keyboard , dan tambahkan pengikatan tombol berikut untuk tugas build:
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "f8", "command": "workbench.action.tasks.build" }
]
Sekarang ketika Anda menekan F8Makefile akan dieksekusi, dan kesalahan akan digarisbawahi di editor.
ctrl+alt+b
untuk tugas build.
Contoh tugas makefile untuk versi 2.0.0 task.json baru.
Dalam cuplikan di bawah ini, beberapa komentar saya harap akan bermanfaat.
{
"version": "2.0.0",
"tasks": [
{
"label": "<TASK_NAME>",
"type": "shell",
"command": "make",
// use options.cwd property if the Makefile is not in the project root ${workspaceRoot} dir
"options": {
"cwd": "${workspaceRoot}/<DIR_WITH_MAKEFILE>"
},
// start the build without prompting for task selection, use "group": "build" otherwise
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
// arg passing example: in this case is executed make QUIET=0
"args": ["QUIET=0"],
// Use the standard less compilation problem matcher.
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["absolute"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
.vscode
. Untuk kontrol revisi git, satu kemungkinan adalah menggunakan .gitignore
pola seperti !.vscode/tasks.json
.
Inilah cara saya mengkonfigurasi VS untuk C ++
Pastikan untuk mengubah jalur yang sesuai ke tempat MinGW Anda dipasang
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)",
"type": "cppdbg",
"request": "launch",
"targetArchitecture": "x86",
"program": "${workspaceRoot}\\${fileBasename}.exe",
"miDebuggerPath":"C:\\mingw-w64\\bin\\gdb.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"externalConsole": true,
"preLaunchTask": "g++"
}
]
}
task.json
{
"version": "0.1.0",
"command": "g++",
"args": ["-g","-std=c++11","${file}","-o","${workspaceRoot}\\${fileBasename}.exe"],
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
"C:/mingw-w64/x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=6",
"__cdecl=__attribute__((__cdecl__))"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"${workspaceRoot}",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/x86_64-w64-mingw32",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/backward",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include",
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include/c++/tr1",
"C:/mingw-w64/x86_64-w64-mingw32/include"
]
},
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
],
"version": 3
}
Referensi:
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
Untuk membangun / menjalankan proyek-proyek C ++ dalam kode VS, Anda secara manual perlu mengkonfigurasi file task.json yang ada di folder .vscode di folder workspace. Untuk membuka task.json , tekan ctrl + shift + P , dan ketik Configure task , dan tekan enter , itu akan membawa Anda ke task.json
Di sini saya memberikan file task.json saya dengan beberapa komentar untuk membuat file lebih dimengerti, Ini dapat digunakan sebagai referensi untuk mengkonfigurasi task.json , saya berharap ini akan berguna
task.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build & run", //It's name of the task , you can have several tasks
"type": "shell", //type can be either 'shell' or 'process' , more details will be given below
"command": "g++",
"args": [
"-g", //gnu debugging flag , only necessary if you want to perform debugging on file
"${file}", //${file} gives full path of the file
"-o",
"${workspaceFolder}\\build\\${fileBasenameNoExtension}", //output file name
"&&", //to join building and running of the file
"${workspaceFolder}\\build\\${fileBasenameNoExtension}"
],
"group": {
"kind": "build", //defines to which group the task belongs
"isDefault": true
},
"presentation": { //Explained in detail below
"echo": false,
"reveal": "always",
"focus": true,
"panel": "shared",
"clear": false,
"showReuseMessage": false
},
"problemMatcher": "$gcc"
},
]
}
Sekarang, menyatakan langsung dari dokumentasi tugas kode VS
deskripsi tipe properti:
- type : tipe tugas. Untuk tugas khusus, ini bisa berupa shell atau proses. Jika shell ditentukan, perintah diartikan sebagai perintah shell (misalnya: bash, cmd, atau PowerShell). Jika proses ditentukan, perintah diartikan sebagai proses untuk mengeksekusi.
Perilaku terminal dapat dikontrol menggunakan properti presentasi di task.json . Menawarkan properti berikut:
mengungkapkan : Mengontrol apakah panel Terminal Terpadu dibawa ke depan. Nilai yang valid adalah:
- selalu - Panel selalu dibawa ke depan. Ini standarnya
- never - Pengguna harus secara eksplisit membawa panel terminal ke depan menggunakan perintah View> Terminal (Ctrl + `).
- silent - Panel terminal dibawa ke depan hanya jika output tidak dipindai untuk kesalahan dan peringatan.
fokus : Mengontrol apakah terminal mengambil fokus input atau tidak. Default salah.
- echo : Mengontrol apakah perintah yang dieksekusi digema di terminal. Default itu benar.
- showReuseMessage : Mengontrol apakah akan menunjukkan "Terminal akan digunakan kembali oleh tugas, tekan tombol apa saja untuk menutupnya" pesan.
- panel : Mengontrol apakah instance terminal dibagi antara tugas berjalan. Nilai yang mungkin adalah:
- shared : Terminal dibagi dan output dari menjalankan tugas lain ditambahkan ke terminal yang sama.
- berdedikasi : Terminal didedikasikan untuk tugas tertentu. Jika tugas itu dieksekusi lagi, terminal digunakan kembali. Namun, output dari tugas yang berbeda disajikan di terminal yang berbeda.
- baru : Setiap pelaksanaan tugas itu menggunakan terminal bersih baru.
- clear: Mengontrol apakah terminal dikosongkan sebelum tugas ini dijalankan. Default salah.
Karena frustrasi karena kurangnya dokumentasi yang jelas, saya telah membuat proyek Mac di github yang seharusnya hanya berfungsi (baik membangun dan debugging):
Perhatikan bahwa ini memerlukan ekstensi XCode dan VSCode Microsoft cpptools.
Saya berencana untuk melakukan hal yang sama untuk Windows dan linux (kecuali Microsoft menulis dokumentasi yang layak terlebih dahulu ...).
Pertama-tama, ekstensi goto (Ctrl + Shift + X) dan instal 2 ekstensi:
Kemudian, muat ulang Kode VS dan pilih tombol putar di bagian atas sudut kanan program Anda berjalan di terminal output. Anda dapat melihat output dengan Ctrl + Alt + N. Untuk mengubah fitur pengaturan pengguna goto lainnya.
Jika proyek Anda memiliki konfigurasi CMake, cukup mudah untuk menyiapkan VSCode, mis. Setup tasks.json
seperti di bawah ini:
{
"version": "0.1.0",
"command": "sh",
"isShellCommand": true,
"args": ["-c"],
"showOutput": "always",
"suppressTaskName": true,
"options": {
"cwd": "${workspaceRoot}/build"
},
"tasks": [
{
"taskName": "cmake",
"args": ["cmake ."]
},
{
"taskName": "make",
"args" : ["make"],
"isBuildCommand": true,
"problemMatcher": {
"owner": "cpp",
"fileLocation": "absolute",
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
Ini mengasumsikan bahwa ada folder build
di root ruang kerja dengan konfigurasi CMake.
Ada juga ekstensi integrasi CMake yang menambahkan perintah "CMake build" ke VScode.
PS! Ini problemMatcher
adalah setup untuk clang
-builds. Untuk menggunakan GCC Saya percaya Anda perlu mengubah fileLocation
ke relative
, tapi saya belum diuji ini.
Inilah cara saya mengonfigurasi VS untuk C ++ menggunakan g ++ compiler dan berfungsi dengan baik termasuk opsi debug:
file task.json
{
"version": "0.1.0",
"command": "g++",
"isShellCommand": true,
// compiles and links with debugger information
"args": ["-g", "-o", "hello.exe", "hello.cpp"],
// without debugger information
// "args": ["-o", "hello.exe", "hello.cpp"],
"showOutput": "always"
}
file launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (Windows)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/hello.exe",
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe",
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"externalConsole": false,
"visualizerFile": "${workspaceRoot}/my.natvis"
}
]
}
Saya juga memiliki ekstensi 'C / C ++ untuk Visual Studio Code' yang diinstal dalam VS Code
Masalah mendasar di sini adalah bahwa membangun dan menautkan program C ++ sangat bergantung pada sistem build yang digunakan. Anda perlu mendukung tugas-tugas berbeda berikut, menggunakan beberapa kombinasi plugin dan kode khusus:
Umum dukungan bahasa C ++ untuk editor. Ini biasanya dilakukan dengan menggunakan ms-vscode.cpptools, yang kebanyakan orang harapkan juga menangani banyak hal lain, seperti membangun dukungan. Biarkan saya menghemat waktu Anda: tidak. Namun, Anda mungkin tetap menginginkannya.
Bangun, bersihkan, dan bangun kembali tugas. Di sinilah pilihan Anda membangun sistem menjadi masalah besar. Anda akan menemukan plugin untuk hal-hal seperti CMake dan Autoconf (tuhan membantu Anda), tetapi jika Anda menggunakan sesuatu seperti Meson dan Ninja, Anda harus menulis beberapa skrip pembantu, dan mengonfigurasi file "tugas.json" khusus untuk tangani ini. Microsoft telah benar-benar mengubah segalanya tentang file itu selama beberapa versi terakhir, hingga apa yang seharusnya disebut dan tempat (ya, placeS) dapat pergi, untuk mengatakan tidak ada yang benar-benar mengubah format. Lebih buruk lagi, mereka telah SORT OF terus mundur kompatibilitas, untuk memastikan untuk menggunakan kunci "versi" untuk menentukan varian mana yang Anda inginkan. Lihat detailnya di sini:
https://code.visualstudio.com/docs/editor/tasks
... tetapi perhatikan konflik dengan:
https://code.visualstudio.com/docs/languages/cpp
PERINGATAN: DALAM SEMUA JAWABAN DI BAWAH INI, APA SAJA YANG DIMULAI DENGAN TAG "VERSI" DI BAWAH 2.0.0 ADALAH OBSOLETE.
Inilah hal terdekat yang saya miliki saat ini. Perhatikan bahwa saya menendang sebagian besar pengangkatan ke skrip, ini tidak benar-benar memberi saya entri menu yang bisa saya jalani, dan tidak ada cara yang baik untuk memilih antara debug dan rilis tanpa hanya membuat tiga entri eksplisit di sini. Dengan semua itu, inilah yang bisa saya toleransi sebagai file .vscode / task.json saya saat ini:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build project",
"type": "shell",
"command": "buildscripts/build-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "rebuild project",
"type": "shell",
"command": "buildscripts/rebuild-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "clean project",
"type": "shell",
"command": "buildscripts/clean-debug.sh",
"args": [],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
// Reveal the output only if unrecognized errors occur.
"echo": true,
"focus": false,
"reveal": "always",
"panel": "shared"
},
// Use the standard MS compiler pattern to detect errors, warnings and infos
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}/DEBUG"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
Perhatikan bahwa, secara teori, file ini seharusnya berfungsi jika Anda meletakkannya di root ruang kerja, sehingga Anda tidak terjebak memeriksa file dalam direktori tersembunyi (.vscode) ke dalam sistem kontrol revisi Anda. Saya belum melihat itu benar-benar berfungsi; mengujinya, tetapi jika gagal, masukkan ke dalam .vscode. Either way, IDE akan menggerutu jika tidak ada di sana. (Ya, pada saat ini, ini berarti saya telah dipaksa untuk memeriksa .vscode ke dalam subversi, yang saya tidak suka.) Perhatikan bahwa skrip build saya (tidak ditampilkan) cukup membuat (atau membuat ulang) direktori DEBUG menggunakan, di kasingku, meson, dan bangun di dalamnya (menggunakan, dalam kasingku, ninja).
Dengan Kode VS yang diperbarui, Anda dapat melakukannya dengan cara berikut:
Hit ( Ctrl+ P) dan ketik:
ext install cpptools
Buka folder ( Ctrl+ K& Ctrl+ O) dan buat file baru di dalam folder dengan ekstensi .cpp (mis: hello.cpp ):
Ketikkan kode Anda dan tekan save.
Tekan ( Ctrl+ Shift+ Pdan ketik, Configure task runner
lalu pilih other
di bagian bawah daftar.
Buat file batch di folder yang sama dengan nama build.bat dan sertakan kode berikut ke tubuh file:
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
set compilerflags=/Od /Zi /EHsc
set linkerflags=/OUT:hello.exe
cl.exe %compilerflags% hello.cpp /link %linkerflags%
Edit file task.json sebagai berikut dan simpan :
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "build.bat",
"isShellCommand": true,
//"args": ["Hello World"],
"showOutput": "always"
}
Tekan ( Ctrl+ Shift+ Buntuk menjalankan tugas Bangun. Ini akan membuat file .obj dan .exe untuk proyek.
Untuk men-debug proyek, Tekan F5dan pilih C ++ (Windows) .
Di file launch.json , edit baris berikut dan simpan file:
"program": "${workspaceRoot}/hello.exe",
Hit F5.
Anda dapat merujuk pada inti terbaru ini yang memiliki 2.0.0
tugas versi untuk Visual Studio Code, https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454
Anda dapat dengan mudah mengkompilasi dan menjalankan setiap file tanpa memperbarui tugas. Ini generik dan juga membuka terminal untuk entri input.
Dapat menggunakan Extension Code Runner untuk menjalankan kode dengan ikon main di atas Kanan dengan tombol pintasan: Ctrl+Alt+N
dan untuk membatalkan Ctrl+Alt+M
. Tetapi secara default ini hanya menampilkan output dari program tetapi untuk menerima input Anda perlu mengikuti beberapa langkah:
Ctrl +, dan kemudian menu pengaturan terbuka dan Extensions> Run Code Configuration gulir ke bawah atributnya dan temukan Edit di settings.json klik padanya dan tambahkan kode berikut ini:
{
"code-runner.runInTerminal": true
}
Sekarang ada ekstensi bahasa C / C ++ dari Microsoft. Anda dapat menginstalnya dengan membuka "buka cepat" ( Ctrl+ p) dan mengetik:
ext install cpptools
Anda dapat membacanya di sini:
https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
Ini sangat mendasar, pada Mei 2016.