Trình soạn thảo Visual Studio Code của Microsoft khá đẹp, nhưng nó không có hỗ trợ mặc định để xây dựng các dự án C ++.
Làm thế nào để tôi cấu hình nó để làm điều này?
Trình soạn thảo Visual Studio Code của Microsoft khá đẹp, nhưng nó không có hỗ trợ mặc định để xây dựng các dự án C ++.
Làm thế nào để tôi cấu hình nó để làm điều này?
Câu trả lời:
Có một cách dễ dàng hơn để biên dịch và chạy mã C ++, không cần cấu hình:
Ctrl+Alt+N
hoặc nhấn F1
và sau đó chọn / gõ Run Code
hoặc bấm chuột phải vào Trình soạn thảo văn bản, sau đó bấm Run Code
vào menu ngữ cảnh, mã sẽ được biên dịch và chạy, và đầu ra sẽ được hiển thị trong Cửa sổ đầu ra.Ngoài ra, bạn có thể cập nhật cấu hình trong settings.json bằng các trình biên dịch C ++ khác nhau mà bạn muốn, cấu hình mặc định cho C ++ như sau:
"code-runner.executorMap": {
"cpp": "g++ $fullFileName && ./a.out"
}
running blablabla
. Không nhắc nhở, không có gì. Làm thế nào để tôi thậm chí dừng mã chạy?
Ctrl+Alt+M
. Để sử dụng stdin để đọc dữ liệu, bạn có thể truy cập File
-> Preference
-> Settings
để đặt "code-runner.runInTerminal": true
. Để biết thêm chi tiết, bạn có thể tham khảo github.com/formulahendry/vscode-code-runner/issues/91
Các nhiệm vụ xây dựng là dự án cụ thể. Để tạo một dự án mới, hãy mở một thư mục trong Visual Studio Code.
Làm theo các hướng dẫn ở đây , nhấn Ctrl+ Shift+ P, gõ Configure Tasks
, chọn nó và nhấn Enter.
Tệp task.json sẽ được mở. Dán đoạn mã xây dựng sau vào tệp và lưu nó:
{
"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
}
}
}
]
}
Bây giờ, hãy vào menu Tệp → Tùy chọn → Phím tắt và thêm ràng buộc phím sau cho tác vụ xây dựng:
// Place your key bindings in this file to overwrite the defaults
[
{ "key": "f8", "command": "workbench.action.tasks.build" }
]
Bây giờ khi bạn nhấn F8Makefile sẽ được thực thi và các lỗi sẽ được gạch chân trong trình chỉnh sửa.
ctrl+alt+b
dành cho tác vụ xây dựng.
Một ví dụ về tác vụ makefile cho phiên bản 2.0.0 task.json mới.
Trong đoạn trích dưới đây một số ý kiến tôi hy vọng chúng sẽ hữu ích.
{
"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
. Đối với điều khiển sửa đổi git, một khả năng là sử dụng cho .gitignore
một mẫu như thế nào !.vscode/tasks.json
.
Đây là cách tôi định cấu hình VS cho C ++
Đảm bảo thay đổi đường dẫn phù hợp đến nơi cài đặt MinGW của bạn
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_properIES.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
}
Tài liệu tham khảo:
"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
Để Xây dựng / chạy các dự án C ++ trong mã VS, bạn cần phải định cấu hình tệp task.json theo cách thủ công trong thư mục .vscode trong thư mục không gian làm việc. Để mở task.json , nhấn ctrl + shift + P và nhập Cấu hình tác vụ và nhấn enter , nó sẽ đưa bạn đến task.json
Ở đây tôi đang cung cấp cho tệp task.json của mình một số nhận xét để làm cho tệp dễ hiểu hơn. Nó có thể được sử dụng làm tài liệu tham khảo để định cấu hình task.json , tôi hy vọng nó sẽ hữu ích
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"
},
]
}
Bây giờ, nêu trực tiếp từ tài liệu nhiệm vụ mã VS
mô tả thuộc tính loại :
- loại : Loại nhiệm vụ. Đối với một tác vụ tùy chỉnh, đây có thể là shell hoặc process. Nếu shell được chỉ định, lệnh được hiểu là lệnh shell (ví dụ: bash, cmd hoặc PowerShell). Nếu quy trình được chỉ định, lệnh được hiểu là một quy trình để thực thi.
Hành vi của thiết bị đầu cuối có thể được kiểm soát bằng cách sử dụng thuộc tính trình bày trong task.json . Nó cung cấp các thuộc tính sau:
tiết lộ : Kiểm soát xem bảng tích hợp Terminal được đưa ra phía trước. Các giá trị hợp lệ là:
- luôn luôn - Bảng điều khiển luôn được đưa ra phía trước. Đây là mặc định
- không bao giờ - Người dùng phải đưa bảng điều khiển thiết bị đầu cuối lên phía trước một cách rõ ràng bằng lệnh View> Terminal (Ctrl + `).
- im lặng - Bảng điều khiển thiết bị đầu cuối chỉ được đưa ra phía trước nếu đầu ra không được quét để tìm lỗi và cảnh báo.
tập trung : Kiểm soát xem thiết bị đầu cuối có lấy tiêu điểm đầu vào hay không. Mặc định là sai.
- echo : Điều khiển xem lệnh đã thực hiện có được lặp lại trong terminal không. Mặc định là đúng.
- showReuseMessage : Kiểm soát xem có hiển thị thông báo "Terminal sẽ được sử dụng lại bởi các tác vụ hay không, nhấn bất kỳ phím nào để đóng nó".
- bảng điều khiển : Kiểm soát xem phiên bản đầu cuối được chia sẻ giữa các lần chạy tác vụ. Các giá trị có thể là:
- đã chia sẻ : Thiết bị đầu cuối được chia sẻ và đầu ra của các tác vụ khác được thêm vào cùng một thiết bị đầu cuối.
- dành riêng : Thiết bị đầu cuối được dành riêng cho một nhiệm vụ cụ thể. Nếu tác vụ đó được thực hiện lại, thiết bị đầu cuối được sử dụng lại. Tuy nhiên, đầu ra của một nhiệm vụ khác nhau được trình bày trong một thiết bị đầu cuối khác.
- mới : Mỗi lần thực hiện tác vụ đó đều sử dụng thiết bị đầu cuối sạch mới.
- xóa: Kiểm soát xem thiết bị đầu cuối có bị xóa trước khi tác vụ này được chạy không. Mặc định là sai.
Vì thất vọng vì thiếu tài liệu rõ ràng, tôi đã tạo một dự án Mac trên github chỉ hoạt động (cả xây dựng và gỡ lỗi):
Lưu ý rằng nó yêu cầu XCode và phần mở rộng cpptools của VSCode Microsoft.
Tôi dự định làm tương tự cho Windows và linux (trừ khi Microsoft viết tài liệu đàng hoàng trước ...).
Trước hết, tiện ích mở rộng goto (Ctrl + Shift + X) và cài đặt 2 tiện ích mở rộng:
Sau đó, sau đó tải lại Mã VS và chọn nút phát ở trên cùng của góc phải chương trình của bạn chạy trong thiết bị đầu cuối. Bạn có thể thấy đầu ra bằng Ctrl + Alt + N. Để thay đổi các tính năng khác cài đặt người dùng goto.
Nếu dự án của bạn có cấu hình CMake, bạn có thể dễ dàng thiết lập VSCode, ví dụ như thiết lập tasks.json
như dưới đây:
{
"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
}
}
}
]
}
Điều này giả định rằng có một thư mục build
trong thư mục gốc của không gian làm việc với cấu hình CMake.
Ngoài ra còn có một phần mở rộng tích hợp CMake có thêm lệnh "CMake build" cho VScode.
Tái bút Đây problemMatcher
là thiết lập cho clang
-builds. Để sử dụng GCC Tôi tin rằng bạn cần phải thay đổi fileLocation
để relative
, nhưng tôi đã không kiểm tra này.
Đây là cách tôi định cấu hình VS cho C ++ bằng trình biên dịch g ++ và nó hoạt động rất tốt bao gồm các tùy chọn gỡ lỗi:
tập tin 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"
}
tập tin 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"
}
]
}
Tôi cũng đã cài đặt tiện ích mở rộng 'C / C ++ cho Visual Studio Code' trong Mã VS
Vấn đề cơ bản ở đây là việc xây dựng và liên kết chương trình C ++ phụ thuộc rất nhiều vào hệ thống xây dựng đang sử dụng. Bạn sẽ cần hỗ trợ các tác vụ riêng biệt sau, sử dụng một số kết hợp bổ trợ và mã tùy chỉnh:
Hỗ trợ ngôn ngữ chung C ++ cho biên tập viên. Điều này thường được thực hiện bằng cách sử dụng ms-vscode.cpptools, mà hầu hết mọi người mong đợi cũng sẽ xử lý rất nhiều thứ khác, như hỗ trợ xây dựng. Hãy để tôi giúp bạn tiết kiệm thời gian: nó không. Tuy nhiên, dù sao bạn cũng sẽ muốn nó.
Xây dựng, làm sạch và xây dựng lại các nhiệm vụ. Đây là nơi lựa chọn hệ thống xây dựng của bạn trở thành một thỏa thuận lớn. Bạn sẽ tìm thấy các plugin cho những thứ như CMake và Autoconf (thần giúp bạn), nhưng nếu bạn đang sử dụng một cái gì đó như Meson và Ninja, bạn sẽ phải viết một số tập lệnh trợ giúp và định cấu hình tệp "task.json" tùy chỉnh để xử lý những điều này. Microsoft đã thay đổi hoàn toàn mọi thứ về tập tin đó trong vài phiên bản gần đây, ngay đến những gì nó được gọi là và địa điểm (vâng, địa điểm) mà nó có thể đi, để nói rằng không có gì thay đổi hoàn toàn định dạng. Tồi tệ hơn, họ đã NGHIÊM TRỌNG khả năng tương thích ngược, để chắc chắn sử dụng phím "phiên bản" để chỉ định biến thể bạn muốn. Xem chi tiết tại đây:
https://code.visualstudio.com/docs/editor/t task
... nhưng lưu ý xung đột với:
https://code.visualstudio.com/docs/lacular/cpp
CẢNH BÁO: TRONG TẤT CẢ CÁC CÂU TRẢ LỜI DƯỚI ĐÂY, BẤT CỨ ĐIỀU NÀO BẮT ĐẦU VỚI TAG "PHIÊN BẢN" DƯỚI ĐÂY 2.0.0 LÀ HẤP DẪN.
Đây là thứ gần nhất tôi có lúc này. Lưu ý rằng tôi loại bỏ hầu hết các kịch bản nặng nề, điều này thực sự không mang lại cho tôi bất kỳ mục trình đơn nào tôi có thể sống và không có cách nào tốt để chọn giữa gỡ lỗi và phát hành mà không cần thực hiện ba mục rõ ràng khác trong đây. Với tất cả những gì đã nói, đây là những gì tôi có thể chịu đựng dưới dạng tệp .vscode / task.json của mình tại thời điểm này:
{
// 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
}
}
}
]
}
Lưu ý rằng, về mặt lý thuyết, tệp này được cho là hoạt động nếu bạn đặt nó trong thư mục gốc của vùng làm việc, để bạn không bị kẹt kiểm tra các tệp trong các thư mục ẩn (.vscode) vào hệ thống kiểm soát sửa đổi của bạn. Tôi chưa thấy rằng thực sự làm việc; kiểm tra nó, nhưng nếu thất bại, hãy đặt nó vào .vscode. Dù bằng cách nào, IDE sẽ chê bai nếu nó không có ở đó. . trường hợp của tôi, meson, và xây dựng bên trong nó (sử dụng, trong trường hợp của tôi, ninja).
Với Mã VS được cập nhật, bạn có thể thực hiện theo cách sau:
Lượt ( Ctrl+ P) và gõ:
ext install cpptools
Mở thư mục ( Ctrl+ K& Ctrl+ O) và tạo một tệp mới bên trong thư mục có phần mở rộng .cpp (ví dụ: hello.cpp ):
Nhập mã của bạn và nhấn lưu.
Nhấn ( Ctrl+ Shift+ Pvà gõ, Configure task runner
sau đó chọn other
ở cuối danh sách.
Tạo một tệp bó trong cùng một thư mục có tên build.bat và bao gồm đoạn mã sau vào phần thân của tệp:
@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%
Chỉnh sửa tệp task.json như sau và lưu nó :
{
// 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"
}
Nhấn ( Ctrl+ Shift+ Bđể chạy tác vụ Build. Điều này sẽ tạo các tệp .obj và .exe cho dự án.
Để gỡ lỗi dự án, nhấn F5và chọn C ++ (Windows) .
Trong tệp launch.json , chỉnh sửa dòng sau và lưu tệp:
"program": "${workspaceRoot}/hello.exe",
Trúng F5.
Bạn có thể tham khảo ý chính mới nhất này có 2.0.0
nhiệm vụ phiên bản cho Visual Studio Code, https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454
Bạn có thể dễ dàng biên dịch và chạy từng tệp mà không cần cập nhật tác vụ. Nó chung chung và cũng mở thiết bị đầu cuối cho các mục nhập.
Có thể sử dụng mở rộng Mã Runner để chạy mã với biểu tượng chơi trên ans Ngay đầu bởi phím tắt: Ctrl+Alt+N
và để hủy bỏ Ctrl+Alt+M
. Nhưng theo mặc định, nó chỉ hiển thị đầu ra của chương trình nhưng để nhận đầu vào, bạn cần làm theo một số bước:
Ctrl +, và sau đó menu cài đặt mở ra và Tiện ích mở rộng> Chạy Cấu hình mã cuộn xuống các thuộc tính của nó và tìm Chỉnh sửa trong settings.json, nhấp vào nó và thêm mã sau đây vào nó:
{
"code-runner.runInTerminal": true
}
Hiện đã có phần mở rộng ngôn ngữ C / C ++ của Microsoft. Bạn có thể cài đặt nó bằng cách vào phần "mở nhanh" ( Ctrl+ p) và gõ:
ext install cpptools
Bạn có thể đọc nó ở đây:
https://bloss.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/
Nó rất cơ bản, kể từ tháng 5 năm 2016.