我裝了MinGW只會運行調試單個文件.c文件,如何才能像codeblocks一樣建立一個project?


C/C++ 可以一條命令編譯多個源文件

gcc -o program.exe a.c b.c c.c d.c

你可以在 tasks.json 裡面把這樣的命令敲進去

"command": "gcc",
"args": [
"-o",
"program.exe",
"a.c",
"b.c",
"c.c",
"d.c"
]

然而如果你的源文件數比較多,或者源文件分佈在多個目錄下,生成的可執行程序也要放入另一個目錄。這種方式就會變得非常的笨拙。而且這種方式是一次性全部編譯鏈接,無法將編譯鏈接拆成兩個步驟分開執行(這點小項目倒也無所謂了)

項目稍微稍微複雜到一定程度,你就會對自動構建工具抱有強烈的渴求,比如 make(makefile),比如 cmake

你可以在 vscode 裡面使用這些自動構建工具,cmake 我沒有用過,我只用過 make

在 vscode 裡面使用 make 很簡單,需要修改的只有 tasks.json 中執行的命令。我們把 makefile 配置文件放置於項目的根目錄,然後在 tasks.json 中寫下:

"command": "make",
"args": [
"-C",
"${workspaceFolder}",
"all"
]

其中 all 是 makefile 裏的標籤(label,需要去學習瞭解 makefile 裏偽目標這個東西)

在你按下 F5 後,vscode 會執行這條命令構建項目,然後根據你在 launch.json 中寫的 "program" 項所指定的可執行文件,啟動程序開始調試。

在 vscode 中使用 make 需要你自己手動管理 makefile,我目前並不知道有什麼插件可以幫我們自動修改 makefile。由於沒有用過 cmake,所以我也不知道在 vscode 中那幾個 cmake 的插件能不能自動幫我們管理配置文件

如果這些配置文件沒法被 vscode 自動管理的話,我們就會需要手寫配置文件。這裡應該纔是對題主而言最難的部分吧。你需要去學習瞭解 C/C++ 的編譯流程和編譯命令,學習如何編寫 makefile/CMakeLists.txt

如果題主還是初學者的話,我並不建議這麼早就搞這些東西。先在 IDE 裡面學習使用 C/C++,到了一定程度之後再來看這些東西怎麼弄會好很多


c語言的項目的編譯管理最根本都是通過makefile進行的,https://seisman.github.io/how-to-write-makefile/rules.html 這個是我之前學習時候找到的材料,內容非常全,寫的非常棒,關鍵是中文的。

如果你要寫跨平臺的軟體,直接寫makefile可能就比較麻煩了,可以用更強大的編譯管理工具,比較流行的是cmake……

學c或者c++會使用makefile是非常重要的,就算是很小的項目也會幫助你更有效率的完成。你也可以瞭解一下編譯管理工具的原理,學Java時候用maven,gradle在編譯這塊基本上做的事情都是差不多的。當然他們都有很多更強大的功能。但凡事一通百通嘛


首先用VS Code打開整個文件夾,然後有幾種方式可以解決你說的問題:

  1. 單獨編輯每個文件。編譯的時候直接編譯多個文件。
  2. 做一個Makefile,用make命令來編譯多個文件。
  3. 類似2,但使用automake生成Makefile,然後再用make來編譯
  4. 類似3,但使用cmake
  5. 類似3,但使用bazel

任何一個都能解決問題,純看你的項目需要哪個了。以上方法不一定跨平臺,在Linux裏或者Windows上的類Linux環境裏應該都能用,Windows上不確定。


vs code並不支持工程

工程的組織得靠自己寫文件和編譯程序去配合

不過我之前幹這個活是寫了個PowerShell腳本,自動找當前目錄下的.cpp文件,拼g++參數,然後手動調腳本

附:那段powershell腳本:

[string[]] $comd = "-o", "Tree.exe"
Get-ChildItem *.cpp | ForEach-Object {$comd += $_.Name }
clang++ $comd

if ($LASTEXITCODE -eq 0) {
.Tree
}

大致解釋一下

[string[]] $comd = "-o", "Tree.exe"

comd是一個string數組,初始倆元素,"-o", "Tree.exe"

Get-ChildItem *.cpp | ForEach-Object {$comd += $_.Name }

獲取目錄下的*.cpp循環加到comd裏

clang++ $comd

調用clang++,參數就是comd

if ($LASTEXITCODE -eq 0) {
.Tree
}

編譯成功了的話運行編譯完成的程序


你可以用Visual Studio呀,為什麼要用VSCode呢?


這只是個編輯器,自己寫makefile吧,不要總想著像IDE一樣按綠色三角形就完事了


VS Code 本身只是一個編輯器,它有插件機制可以支持各種編譯工具(也就是題主說的 project)。

我覺得,關鍵在於回去複習好《編譯原理》這門課……算了劃掉,不那麼皮了。課本往往太理論,一頭就扎進編譯器內部了,反而對如何使用編譯器著墨太少。可以讀一下我另一個回答:如何實現多文件編譯??

www.zhihu.com圖標

瞭解了基本原理和操作之後,再回頭來選擇一個自己心儀的編譯工具。初學階段,我個人推薦先使用 Visual Studio Community Edition。有些經驗之後,試試 CMake。


推薦閱讀:
相關文章