# 第一步: 如何用 ctrl + shift + B 執行一個 shell script 編譯我的專案 ### 定義一個 task https://stackoverflow.com/questions/70804147/how-to-run-bash-script-within-vs-code 在你的 tasks.json 設定 command 執行一個 bash 就可以做任何你需要做的事情 不管你的編譯過程有多複雜都可以 如果有什麼參數必須從 VS Code 帶給那支 bash script,就用 args 帶過去, 例如 ${fileDirname} ### 執行 task 你可以用 ctrl + shift + B 執行預設的 task 注意 group.kind 必須定義成 "build" 才會出現在 ctrl + shift + B 的清單 或者你也可以用 ctrl + shift + P 叫出命令選單 輸入 run task 執行 Task: Run Task 這樣 VS Code 就會列出他在 tasks.json 中找到的 task 更複雜一點, 如果你有某個 task B 必須依賴另一個 task A 先執行 那你可以設定 task B 的dependsOn 欄位 ( 參考 https://code.visualstudio.com/docs/editor/tasks ) 如果不想使用 dependsOn 欄位,你可以把每個 task A 和 task B 都寫成單獨的 shell script 在 tasks.json 中定義兩個 task 分別執行 A 和 B 並且在 task_b_script 中呼叫 task_a_script 那你就不用學習太多跟 tasks.json 相關的知識 # 第二步: ctrl + shift +B 太麻煩了 如何用 F5 解決 因為 ctrl + shift + B 我覺得有點麻煩 而且我希望 Run and Debug 有我所有需要執行的東西 而不是有些在 Run and Debug 有些在 Tasks 選單 所以弄了一個不正式的做法 # VS Code 的 Run and Debug 怎麼設定 VS Code 按下 F5 時會根據你在 Run and Debug 面板選取的 Config 執行不同的任務 設定好 launch.json 就可以透過 F5 執行各式各樣的 Task 例如編譯和偵錯 ## launch.json 的用途 在一個新的工作目錄中 按下 F5 此時因為沒有設定 launch.json 的內容 VS Code 不知道你想做什麼, 此時會跳出一些選項問你是否要 Debug 或是 Run 根據你的選擇, 自動產生一個 config 在 launch.json 中 ## config 的內容 launch.json 中的 configurations 欄位可以定義多個 config config 中幾個比較重要的欄位如下 - name 就是你在左側 Run and Debug 下拉選單會看到的名稱 - type 定義要使用哪一個 extension 例如 "type": "cppbuild" 是用來編譯 cpp 的 "type": "python" 是用來執行 python "type": "cppdbg" 可以利用 gdb 偵錯 cpp ## 如何 F5 編譯 cpp 如果希望按下 F5 的時候執行編譯 你可以使用 "type":"cppbuild" 並且將適當的參數傳給這個 extension 但是如果你不想學習怎麼設定這些參數, 或是遇到問題 有一個簡單的 workaround 1. 使用 "type":"cppdbg" 2. 將 preLaunchTask 設定為你在 tasks.json 中定義的編譯任務名稱 (label欄位) 3. 將 "program": 指向一個找不到路徑的可執行檔 這樣當你按下 F5 執行這個 config, 他就會先進行 preLaunchTask 的編譯過程 接著因為找不到執行檔而結束, 並產生錯誤訊息 或是你也可以將 "program" 指向一個執行後就會立刻結束的可執行檔 並且印出 "build completed" 之類的訊息 關於 preLaunchTask 欄位可以參考 https://code.visualstudio.com/docs/cpp/config-linux ## 如何 debug cpp 如同前一節設定使用 "type":"cppdbg" 只是將 program 設定成編譯後產生的可執行檔路徑
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up