配置vscode c/c++像sublime那樣按Ctrl+shift+B編譯直接運行


需求:

最近喜歡折騰各種編輯器。

用了vscode官方的c/c++插件,配好launch.json和tasks.json之后用debug還是感覺很不錯的。

但是感覺對於acm有些用不上,反而不太靈敏,用起來也不太方便。

就想配成像subliime自帶的那樣:

1、編譯之后直接運行

2、可以把輸出顯示在下面這種

 

過程:

考慮到vscode默認ctrl+shift+B是build,只要在tasks.json里寫"build"的task就行了,像這樣

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "tasks": [
        {
            "taskName": "build",
            "command": "g++",
            
            "isShellCommand": true,
            "args": [
                "-o",
                "${workspaceRoot}/main",
                "${workspaceRoot}/main.cpp"
            ],
            "showOutput": "always"
        }
    ]
}

我們就可以把運行的命令也寫進去。

但是嘗試了許多辦法,都不行,比如:

1、args里后面加上“&&”和"${workspaceRoot}/main"

2、tasks數組中寫兩個task字典,分別是不同的task,一個是build一個是run。后來看了看微軟的文檔,貌似只是定義不同的任務,我一開始還以為是順序執行(也許是我沒看完全吧)。

這兩個辦法都不行,最后想了個辦法,直接自定義一個新的bash命令,把編譯和運行的命令全都寫進去就行了。

 

解決方法:

1、新建一個文件,命名為gbr(g++ build and run,自己瞎起),隨便放在哪,假設在~(家目錄)

touch gbr

 

2、編輯這個文件,隨便用什么編輯器gedit,vim,sublime,vscode無所謂,反正內容不多,gedit就夠了。

輸入一下內容。

g++ -o $1 $1.cpp
$1

$1表示外面傳的參數

比如說你要編譯並運行的文件是~/main.cpp

只要輸入 gbr ~/main 就行了。

 

3、把文件設置為可執行文件,我直接給了755權限。

chmod 755 ~/gbr

 

4、這個時候你在~目錄下已經可以通過./gbr ~/main運行了,但是要讓vscode能夠使用這個命令,我們直接把這個文件移動到/usr/bin就行啦。

sudo mv ~/gbr /usr/bin/gbr

這時候在終端里就能用gbr ~/main 運行這條命令了。

 

5、最后在vscode中修改tasks.json配置即可。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "tasks": [
        {
            "taskName": "build",
            "echoCommand": true,
            "command": "gbr",
            "isShellCommand": true,
            "args": [
                "${workspaceRoot}/main"
            ],
            "showOutput": "always"
        }
    ]
}
echoCommand參數是讓命令在下面顯示出來。

 

這個方法只是我自己的一個小小探索,不過我想肯定有更加簡便的方法,或許日后會發現。

 

后續優化:

1、編譯c++14

2、計算並輸出程序運行時間。

修改gbr文件即可:

#!/bin/bash

# get start time
start=$(date +%s%N)
start_ms=${start:0:16}

# build
g++ -o $1 $1.cpp -std=c++14

# run
$1

# get end time
end=$(date +%s%N)
end_ms=${end:0:16}

#output
printf "[Finished in %.1fs]\n" $(echo "scale=1; ($end_ms - $start_ms)/1000000" | bc)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM