ฉันจะตั้งค่า Visual Studio Code เพื่อคอมไพล์รหัส C ++ ได้อย่างไร


222

โปรแกรมแก้ไขVisual Studio Codeของ Microsoft นั้นค่อนข้างดี แต่ก็ไม่รองรับค่าเริ่มต้นสำหรับการสร้างโครงการ C ++

ฉันจะกำหนดค่าให้ทำเช่นนี้ได้อย่างไร


12
มีคำตอบมากมายสำหรับการคอมไพล์รหัส C ++ ใน Linux แต่ Windows ล่ะ
Charles Milette

5
ช่างเป็นสิ่งพื้นฐานและยังไม่มีทรัพยากรที่มีประโยชน์ในการทำเช่นนี้ในหน้าต่าง และ ms cpptools ไม่ต้องพูดถึง ฉันเดาว่ามันเป็นเพียงการเพิ่มความคับข้องใจของคุณ มันไม่ทำอะไรเลย
Kshitij

ใครพบวิธีแก้ปัญหา? ฉันสามารถรวบรวม แต่ไม่สามารถดีบัก C / C ++ บน VSCode นี้บทความกล่าวว่าการแก้จุดบกพร่องได้รับการสนับสนุนบนลินุกซ์ นอกจากนี้เมื่อเร็ว ๆ นี้ฉันได้สร้างกระทู้นี้สำหรับเดียวกัน จะซาบซึ้งในความช่วยเหลือใด ๆ ...
Mahesha999

คำตอบ:


133

มีวิธีที่ง่ายกว่าในการรวบรวมและเรียกใช้รหัส C ++ ไม่จำเป็นต้องมีการกำหนดค่า:

  1. ติดตั้งส่วนขยายของCode Runner
  2. เปิดไฟล์รหัส C ++ ของคุณใน Text Editor จากนั้นใช้ทางลัดCtrl+Alt+NหรือกดF1จากนั้นเลือก / พิมพ์Run Codeหรือคลิกขวาที่ Text Editor จากนั้นคลิกRun Codeในเมนูบริบทรหัสจะถูกคอมไพล์และรันและผลลัพธ์จะปรากฏใน หน้าต่างแสดงผล

นอกจากนี้คุณสามารถอัปเดตการกำหนดค่าใน settings.json โดยใช้คอมไพเลอร์ C ++ ที่แตกต่างกันตามที่คุณต้องการการกำหนดค่าเริ่มต้นสำหรับ C ++ มีดังต่อไปนี้:

"code-runner.executorMap": {
    "cpp": "g++ $fullFileName && ./a.out"
}

4
หน้าต่างออกของฉันคือ stucked running blablablaที่ ไม่มีอะไรเลย ฉันจะหยุดรหัสที่ใช้งานได้อย่างไร
Hichigaya Hachiman

11
Ctrl+Alt+Mในการหยุดการทำงานรหัสการใช้งาน หากต้องการใช้ stdin อ่านข้อมูลคุณสามารถไปที่File-> Preference-> ชุดSettings "code-runner.runInTerminal": trueสำหรับรายละเอียดเพิ่มเติมคุณสามารถอ้างถึงgithub.com/formulahendry/vscode-code-runner/issues/91
Jun Han

1
การรันในหน้าต่างเอาต์พุตป้องกันมิให้อินพุตเทอร์มินัล runInTerminal ดูเหมือนว่าจำเป็น ...
แอนดรูวูล์ฟ

รับข้อผิดพลาด - "ข้อผิดพลาด: ชื่อไฟล์ว่างใน #include"
gaurav

9
คุณควรเปิดเผยว่าคุณเป็นผู้แต่งส่วนขยายที่คุณกำลังโปรโมต
Codebling

86

งานบิลด์เป็นโครงการเฉพาะ ในการสร้างโครงการใหม่ให้เปิดไดเรกทอรีใน Visual Studio Code

ทำตามคำแนะนำที่นี่กดCtrl+ Shift+ Pชนิดให้เลือกและกดConfigure TasksEnter

ไฟล์ task.json จะถูกเปิด วางสคริปต์บิลด์ต่อไปนี้ลงในไฟล์และบันทึก:

{
    "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
                }
            }
        }
    ]
}

ตอนนี้ไปที่เมนูไฟล์ →การตั้งค่าแป้นพิมพ์ลัดและเพิ่มการเชื่อมโยงคีย์ต่อไปนี้สำหรับงานบิลด์:

// Place your key bindings in this file to overwrite the defaults
[
    { "key": "f8",          "command": "workbench.action.tasks.build" }
]

ตอนนี้เมื่อคุณกดF8Makefile จะถูกดำเนินการและข้อผิดพลาดจะถูกขีดเส้นใต้ในตัวแก้ไข


8
คำเตือน - รูปแบบของไฟล์นี้มีการเปลี่ยนแปลงและสิ่งนี้ไม่ถูกต้องอีกต่อไป โปรดดู: go.microsoft.com/fwlink/?LinkId=733558
เบรกพอยต์

คีย์เริ่มต้นใช้ctrl+alt+bสำหรับงานบิลด์
danger89

มีคำสั่งหรือการเชื่อมโยงที่จะข้ามไปยังข้อผิดพลาดถัดไป / ก่อนหน้าในเทอร์มินัลหรือไม่? ฉันมีสถานการณ์ที่บานหน้าต่าง "ปัญหา" มีปัญหาที่ไม่เกี่ยวข้องจำนวนมาก (เนื่องจาก VS Code ไม่รู้จริง ๆ ว่าจะสร้างโครงการของฉันได้อย่างไรและมันจะเกี่ยวข้องกับการสอนมากเกินไป) แต่ "เทอร์มินัล" ของฉันคือ เต็มไปด้วยข้อผิดพลาดที่มีประโยชน์หลังจากการสร้าง ฉันแค่ต้องใช้แป้นพิมพ์ลัดเพื่อข้ามไปยังข้อผิดพลาดถัดไปใน "Terminal" ...
Dan L

47

ตัวอย่างงาน makefile สำหรับเวอร์ชัน 2.0.0 ใหม่.json

ในตัวอย่างด้านล่างความคิดเห็นบางฉันหวังว่าพวกเขาจะเป็นประโยชน์

{
    "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
                }
            }
        }
    ]
}

2
ยังคงเป็นปัจจุบันในเดือนพฤศจิกายน 2018 ขอบคุณ!
TheIntern

คุณวางไดเรกทอรีนี้ไว้ที่ใด รูท ".vs" หรือ ".vscode"? สมมุติว่ารูทเวิร์กสเปซเป็นตำแหน่งที่แนะนำหากไฟล์นั้นยังอยู่ในการควบคุมการแก้ไข (ซึ่งฉันขอแนะนำอย่างยิ่ง) แต่ฉันไม่สามารถใช้มันได้
เบรกพอยต์

.vscodeสำหรับสิ่งที่ฉันรู้ว่าสถานที่ที่ถูกต้องเท่านั้นในขณะนี้คือ สำหรับการควบคุมการแก้ไขคอมไพล์หนึ่งในความเป็นไปได้คือการใช้งานสำหรับรูปแบบเช่น.gitignore !.vscode/tasks.json
attdona

14

นี่คือวิธีที่ฉันกำหนดค่า VS สำหรับ C ++

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนเส้นทางที่เหมาะสมไปยังจุดที่ MinGW ของคุณติดตั้ง

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++"                    
           }
   ]
}

tasks.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
}

อ้างอิง:

  1. C / C ++ สำหรับรหัส VS

  2. เทมเพลต c_cpp_properties.json


13
บางทีคุณอาจต้องการอธิบายเล็กน้อยว่าการตั้งค่าของคุณกำลังทำอะไรอยู่และไม่เพียงคัดลอกเนื้อหาของการวาง
uitty400

2
มันยากสำหรับฉันที่จะอธิบายการตั้งค่าของฉัน
Li Kui

ตรวจสอบให้แน่ใจว่าได้เปลี่ยนเส้นทางที่เหมาะสมไปยังจุดที่ MinGW ของคุณติดตั้ง
Anthony Lei

นอกจากนี้คุณยังสามารถรวมโฟลเดอร์ย่อยซ้ำด้วย / ** แทนที่จะทำซ้ำโฟลเดอร์ย่อยต่าง ๆ ใน"C:/mingw-w64/lib/gcc/x86_64-w64-mingw32/7.2.0/include"
Lorenz

10

ในการสร้าง / รันโครงการ C ++ ในรหัส VS คุณต้องกำหนดค่าไฟล์task.jsonด้วยตนเองซึ่งอยู่ในโฟลเดอร์. vscodeในโฟลเดอร์เวิร์กสเปซ หากต้องการเปิดtask.jsonให้กดctrl + shift + Pแล้วพิมพ์Configure taskและกดEnterระบบจะนำคุณไปยังtask.json

นี่ฉันกำลังให้ไฟล์task.jsonของฉันพร้อมข้อคิดเห็นบางอย่างเพื่อให้เข้าใจไฟล์ได้ง่ายขึ้นสามารถใช้เป็นข้อมูลอ้างอิงสำหรับการกำหนดค่าtask.jsonฉันหวังว่ามันจะมีประโยชน์

tasks.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"
        },

    ]
}

ตอนนี้ระบุโดยตรงจากเอกสารงานรหัส VS

คำอธิบายของคุณสมบัติประเภท :

  • ประเภท : ประเภทของงาน สำหรับภารกิจที่กำหนดเองสิ่งนี้อาจเป็นเชลล์หรือกระบวนการ หากระบุเชลล์คำสั่งจะถูกตีความเป็นคำสั่งเชลล์ (เช่น: bash, cmd หรือ PowerShell) หากระบุกระบวนการคำสั่งจะถูกตีความเป็นกระบวนการที่จะดำเนินการ

ลักษณะการทำงานของเครื่องที่สามารถควบคุมการใช้ งานนำเสนอคุณสมบัติในtasks.json มันมีคุณสมบัติดังต่อไปนี้:

  • เปิดเผย : ควบคุมว่าจะนำพาเนลรวมไปยังด้านหน้าหรือไม่ ค่าที่ถูกต้องคือ:

    • เสมอ - พาเนลถูกนำมาไว้ด้านหน้าเสมอ นี่คือค่าเริ่มต้น
    • ไม่เคย - ผู้ใช้จะต้องนำพาเนลเทอร์มินัลไปไว้ด้านหน้าโดยใช้คำสั่ง View> Terminal (Ctrl + `)
    • silent - พาเนลเทอร์มินัลถูกนำมาไว้ด้านหน้าหากเอาต์พุตไม่ถูกสแกนเพื่อหาข้อผิดพลาดและคำเตือน
  • โฟกัส : ควบคุมว่าเทอร์มินัลกำลังรับโฟกัสเข้าหรือไม่ ค่าเริ่มต้นเป็นเท็จ

  • echo : ควบคุมว่าคำสั่งที่ดำเนินการถูกสะท้อนในเทอร์มินัลหรือไม่ ค่าเริ่มต้นเป็นจริง
  • showReuseMessage : ควบคุมว่าจะแสดงข้อความ "เทอร์มินัลจะถูกนำกลับมาใช้ใหม่โดยงานหรือไม่กดปุ่มใดก็ได้เพื่อปิด"
  • พาเนล : ควบคุมว่าจะแบ่งปันเทอร์มินัลระหว่างการเรียกใช้งานหรือไม่ ค่าที่เป็นไปได้คือ:
    • ที่ใช้ร่วมกัน : เทอร์มินัลที่ใช้ร่วมกันและเอาท์พุทของการทำงานอื่น ๆ จะถูกเพิ่มไปยังสถานีเดียวกัน
    • โดยเฉพาะ : เทอร์มินัลจะทุ่มเทให้กับงานเฉพาะ หากงานนั้นดำเนินการอีกครั้งเทอร์มินัลจะถูกนำมาใช้ซ้ำ อย่างไรก็ตามผลลัพธ์ของงานที่แตกต่างกันจะถูกนำเสนอในสถานีที่แตกต่างกัน
    • ใหม่ : การดำเนินการของงานนั้นทุกครั้งจะใช้เทอร์มินัลใหม่ทั้งหมด
  • clear:ควบคุมว่าจะยกเลิกเทอร์มินัลก่อนที่จะรันงานนี้หรือไม่ ค่าเริ่มต้นเป็นเท็จ

9

ด้วยความยุ่งยากในการขาดเอกสารที่ชัดเจนฉันได้สร้างโครงการ Mac บน GitHub ที่ควรใช้งานได้ (ทั้งการสร้างและการดีบัก):

vscode-Mac-C-ตัวอย่างเช่น

โปรดทราบว่ามันต้องมีส่วนขยาย XCode และ VSCode Microsoft cpptools

ฉันวางแผนที่จะทำเช่นเดียวกันสำหรับ Windows และ linux (ยกเว้นว่า Microsoft เขียนเอกสารที่เหมาะสมก่อน ... )


8

ก่อนอื่นเลยส่วนขยาย goto (Ctrl + Shift + X) และติดตั้ง 2 ส่วนขยาย:

  1. นักวิ่งรหัส
  2. C / C ++

จากนั้นจึงโหลดรหัส VS อีกครั้งและเลือกปุ่มเล่นที่ด้านบนของมุมขวาโปรแกรมของคุณทำงานในเทอร์มินัลเอาท์พุท คุณสามารถดูผลลัพธ์โดย Ctrl + Alt + N เพื่อเปลี่ยนคุณสมบัติอื่น ๆ การตั้งค่าผู้ใช้ goto ป้อนคำอธิบายรูปภาพที่นี่


นี่คือคำตอบก่อนหน้านี้ซ้ำ
JDługosz

5

หากโครงการของคุณมีการกำหนดค่า CMake มันจะส่งต่อไปยังการตั้งค่า VSCode เช่นการตั้งค่าtasks.jsonด้านล่าง:

{
    "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
                }
            }
        }
    ]
}

นี่ถือว่ามีโฟลเดอร์buildในรูทของเวิร์กสเปซที่มีการกำหนดค่า CMake

นอกจากนี้ยังมีส่วนขยายการรวม CMakeที่เพิ่มคำสั่ง "CMake build" ลงใน VScode

PS! problemMatcherตั้งค่าสำหรับ - clangสร้าง หากต้องการใช้ GCC ผมเชื่อว่าคุณต้องมีการเปลี่ยนแปลงfileLocationไปrelativeแต่ฉันไม่ได้ทดสอบนี้


5

นี่คือวิธีที่ฉันกำหนดค่า VS สำหรับ C ++ โดยใช้คอมไพเลอร์ g ++ และใช้งานได้ดีรวมถึงตัวเลือกการดีบัก:

ไฟล์ 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"
}

ไฟล์ 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"
        }
    ]
}

ฉันยังมีส่วนขยาย 'C / C ++ สำหรับ Visual Studio Code' ติดตั้งอยู่ใน VS Code


ฉันสามารถรวบรวม แต่ไม่สามารถดีบัก C / C ++ บน VSCode นี้บทความกล่าวว่าการแก้จุดบกพร่องได้รับการสนับสนุนบนลินุกซ์ นอกจากนี้เมื่อเร็ว ๆ นี้ฉันได้สร้างกระทู้นี้สำหรับเดียวกัน จะซาบซึ้งในความช่วยเหลือใด ๆ ...
Mahesha999

5

ปัญหาพื้นฐานที่นี่คือการสร้างและเชื่อมโยงโปรแกรม C ++ ขึ้นอยู่กับระบบการสร้างที่ใช้ คุณจะต้องสนับสนุนงานที่แตกต่างกันดังต่อไปนี้โดยใช้การรวมกันของปลั๊กอินและรหัสที่กำหนดเอง:

  1. การสนับสนุนภาษา C ++ ทั่วไปสำหรับเครื่องมือแก้ไข สิ่งนี้มักจะทำโดยใช้ ms-vscode.cpptools ซึ่งคนส่วนใหญ่คาดว่าจะจัดการกับสิ่งอื่น ๆ อีกมากมายเช่นสร้างการสนับสนุน ผมขอช่วยคุณประหยัดเวลา: ไม่ได้ อย่างไรก็ตามคุณอาจจะต้องการมันต่อไป

  2. สร้างทำความสะอาดและสร้างงานใหม่ นี่คือที่ที่คุณเลือกสร้างระบบกลายเป็นเรื่องใหญ่ คุณจะพบปลั๊กอินสำหรับสิ่งต่าง ๆ เช่น CMake และ Autoconf (พระเจ้าช่วยคุณ) แต่ถ้าคุณใช้บางอย่างเช่น Meson และ Ninja คุณจะต้องเขียนสคริปต์ตัวช่วยและตั้งค่าไฟล์ "task.json" ที่กำหนดเองเพื่อ จัดการกับสิ่งเหล่านี้ Microsoft ได้เปลี่ยนแปลงทุกอย่างเกี่ยวกับไฟล์นั้นในสองสามเวอร์ชันล่าสุดไปจนถึงสิ่งที่ควรจะถูกเรียกและสถานที่ (ใช่สถานที่) ที่สามารถไปได้โดยไม่พูดอะไรเลยเกี่ยวกับการเปลี่ยนแปลงรูปแบบทั้งหมด ยิ่งไปกว่านั้นพวกเขายังมีความเข้ากันได้แบบย้อนกลับเพื่อให้แน่ใจว่าได้ใช้ปุ่ม "version" เพื่อระบุตัวแปรที่คุณต้องการ ดูรายละเอียดที่นี่:

https://code.visualstudio.com/docs/editor/tasks

... แต่บันทึกขัดแย้งกับ:

https://code.visualstudio.com/docs/languages/cpp

คำเตือน: ในคำตอบทั้งหมดข้างล่างนี้สิ่งที่เริ่มต้นด้วยแท็ก "รุ่น" แท็กด้านล่าง 2.0.0 เป็น OBSOLETE

นี่คือสิ่งที่ใกล้เคียงที่สุดที่ฉันมีในขณะนี้ โปรดทราบว่าฉันเตะส่วนใหญ่ของการยกไปที่สคริปต์นี่ไม่ได้ให้รายการเมนูใด ๆ ที่ฉันสามารถมีชีวิตอยู่ได้และไม่มีวิธีใดที่ดีในการเลือกระหว่างการดีบักและการปล่อยโดยไม่ต้องทำรายการที่ชัดเจนสามรายการใน ที่นี่ จากทั้งหมดที่กล่าวมานี่คือสิ่งที่ฉันสามารถทนเป็นไฟล์. vscode / task.json ของฉันในขณะนี้:

{
// 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
            }
        }
    }
]

}

โปรดทราบว่าในทางทฤษฎีแล้วไฟล์นี้ควรใช้งานได้หากคุณใส่ไว้ในรูทเวิร์กสเปซเพื่อที่คุณจะไม่ได้ตรวจสอบไฟล์ในไดเรกทอรีที่ซ่อนอยู่ (.vscode) ในระบบควบคุมการแก้ไขของคุณ ฉันยังไม่เห็นว่าใช้งานได้จริง ทดสอบมัน แต่ถ้ามันล้มเหลวให้วางไว้ใน. vscode ไม่ว่าจะด้วยวิธีใด IDE จะเลวร้ายหากไม่ได้อยู่ที่นั่น (ใช่ในขณะนี้หมายความว่าฉันถูกบังคับให้ตรวจสอบ. vscode เป็นการโค่นล้มซึ่งฉันไม่พอใจ) โปรดทราบว่าสคริปต์การสร้างของฉัน (ไม่แสดง) เพียงแค่สร้าง (หรือสร้างใหม่) ไดเรกทอรี DEBUG ที่ใช้ใน กรณีของฉันมีซอนและสร้างข้างใน (ใช้ในกรณีของฉันนินจา)

  1. เรียกใช้ดีบักแนบหยุดทำงาน เหล่านี้เป็นชุดของงานอื่นที่กำหนดไว้ใน "launch.json" หรืออย่างน้อยพวกเขาเคยเป็น Microsoft ได้ทำเอกสารแฮชดังกล่าวฉันไม่แน่ใจอีกต่อไป

นี่คือไฟล์ build-script / build-debug.sh เป็นตัวอย่าง โดยหลักการแล้วสิ่งเหล่านี้จะสืบทอดบริบทการสร้าง (ดีบั๊ก, รีลีส, การทำโปรไฟล์ ฯลฯ ) แต่ฉันไม่สามารถหาวิธีที่ Code จัดการได้ถ้ามันมีแนวคิด ให้อภัยการจัดรูปแบบ; go, StackOverflow, go #! / bin / bash ถ้า [! -d "DEBUG"]; mkdir แล้ว DEBUG อนุภาค meson DEBUG fi cd DEBUG นินจาถ้า [$? -eq 0]; จากนั้นออกจาก 0 และออกจาก $ อีกหรือไม่ fi
เบรกพอยต์

โอ้อีกครั้ง: กด CTRL-SHIFT-B หลังจากนี้เพื่อดึงงานบิลด์ขึ้น ฉันอยากเลือกเมนูหลักที่เหมาะสมซึ่งเต็มไปด้วยสิ่งเหล่านี้ แต่ฉันยังไม่เข้าใจวิธีการทำเช่นนั้น
เบรกพอยต์

4

ด้วยรหัส VS ที่อัปเดตคุณสามารถทำได้ในลักษณะดังต่อไปนี้:

  1. กด ( Ctrl+ P) และพิมพ์:

    ext install cpptools
    
  2. เปิดโฟลเดอร์ ( Ctrl+ K& Ctrl+ O) และสร้างไฟล์ใหม่ภายในโฟลเดอร์ด้วยนามสกุล. cpp (เช่น: hello.cpp ):

  3. พิมพ์รหัสของคุณและกดบันทึก

  4. กด ( Ctrl+ Shift+ PและประเภทConfigure task runnerแล้วเลือกotherที่ด้านล่างของรายการ

  5. สร้างแบตช์ไฟล์ในโฟลเดอร์เดียวกันกับชื่อbuild.batและรวมรหัสต่อไปนี้ไว้ในเนื้อความของไฟล์:

    @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%
    
  6. แก้ไขไฟล์task.jsonดังต่อไปนี้และบันทึก :

    {
    // 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"
    }
    
  7. กดปุ่ม( Ctrl+ Shift+ Bเพื่อเรียกใช้งาน Build ซึ่งจะเป็นการสร้างไฟล์. objและ. exeสำหรับโครงการ

  8. สำหรับการแก้จุดบกพร่องโครงการ Hit F5และเลือกC ++ (Windows)

  9. ในไฟล์launch.jsonให้แก้ไขบรรทัดต่อไปนี้และบันทึกไฟล์:

    "program": "${workspaceRoot}/hello.exe",
    
  10. F5hit


ฉันใช้ VSC ล่าสุด คุณทำให้ฉันแพ้ในขั้นตอนที่ 4 การกำหนดค่า task runner ไม่พร้อมใช้งาน
หลุยส์

2

คุณสามารถอ้างอิงถึงส่วนสำคัญล่าสุดนี้ที่มี2.0.0งานรุ่นสำหรับรหัส Visual Studio, https://gist.github.com/akanshgulati/56b4d469523ec0acd9f6f59918a9e454

คุณสามารถรวบรวมและเรียกใช้แต่ละไฟล์โดยไม่ต้องอัพเดตงาน เป็นเรื่องทั่วไปและยังเปิดเทอร์มินัลสำหรับรายการอินพุต


2

สามารถใช้ขยายรหัส Runnerรหัสการทำงานที่มีไอคอนเล่น ans ขวาบนโดยคีย์ลัด: และยกเลิกCtrl+Alt+N Ctrl+Alt+Mแต่โดยค่าเริ่มต้นจะแสดงเฉพาะผลลัพธ์ของโปรแกรม แต่สำหรับการรับอินพุตคุณต้องทำตามขั้นตอนบางอย่าง:

Ctrl +,จากนั้นเมนูการตั้งค่าจะเปิดขึ้นและส่วนขยาย> เรียกใช้การกำหนดค่ารหัสเลื่อนลงไปตามคุณสมบัติและค้นหาการแก้ไขใน settings.jsonคลิกที่มันและเพิ่มรหัสต่อไปนี้ insite มัน:

{ "code-runner.runInTerminal": true }


Ctrl + ซูมเข้าสำหรับฉัน
MM

มันเป็น ctrl คอมม่าไม่ใช่ ctrl บวกกับเปิดการตั้งค่า
Ashley Fernandes

1

ขณะนี้มีส่วนขยายภาษา C / C ++ จาก Microsoft คุณสามารถติดตั้งได้โดยไปที่สิ่งที่ "เปิดอย่างรวดเร็ว" ( Ctrl+ p) และพิมพ์:

ext install cpptools

คุณสามารถอ่านได้ที่นี่:

https://blogs.msdn.microsoft.com/vcblog/2016/03/31/cc-extension-for-visual-studio-code/

มันธรรมดามาก ณ เดือนพฤษภาคม 2559


2
นี้เป็นเส้นเขตแดนคำตอบการเชื่อมโยงเท่านั้น คุณควรขยายคำตอบเพื่อรวมข้อมูลให้มากที่สุดที่นี่และใช้ลิงก์เพื่อการอ้างอิงเท่านั้น
jhpratt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.