首頁 > 軟體

VScode中C++標頭檔案問題的終極解決方法詳析

2022-08-10 18:03:46

引言

之前在設定VScode環境的時候,按照網上的文章設定,總是找不到標頭檔案,搜尋解決方案,都是千篇一律,沒有說到重點。在此詳細解釋一下。

區域性設定全域性設定傻傻分不清楚

網上很多文章都在講一個組態檔c_cpp_properties.json,但是有些人不知道什麼原因是找不到這個組態檔的。在擴充套件面板中,點選C++的設定進入的頁面其實是通用設定頁面,大概長這樣:

這裡只能看到"在settings.json中編輯"的選項,無論怎麼寫,都不可能生效,因為真正的組態檔在c_cpp_properties.json中。settings.json檔案中的都是全域性的一些預設設定。比如說,我設定完之後是這樣的:

//全域性的settings.json
{
"C_Cpp.default.compilerPath": "C:/MinGW/bin/g++.exe",
    "C_Cpp.default.includePath": [
        "${workspaceFolder}/**",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
    ],
    "C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
}

這樣的設定本身沒有錯,但是最關鍵的問題在於,如果之前已經用vscode開啟過資料夾,並且在資料夾中自動生成了.vscode組態檔夾,那麼大概率會自動生產一個c_cpp_properties.json組態檔,並且是不帶預設設定的,大概是這樣:

//.vscode資料夾區域性的設定c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**" //問題就出在這一行
            ],
            "defines": [],
            "compilerPath": "C:/MinGW/bin/g++.exe", 
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

如果.vscode區域性的組態檔沒有顯示的宣告c_cpp外掛的includePath那麼相當於只有這一行"${workspaceFolder}"的設定生效,也就是隻在當前工作目錄下查詢標頭檔案,那能找到才怪咧。

因此,要特別注意,如果發現include標頭檔案出現問題,首先看一下.vscode目錄下的設定是否正確,然後再去看全域性的設定。

這種情況的解決方案很簡單,因為全域性的default設定已經寫好了include的路徑,只需要在區域性的設定這兒增加一行"${default}"即可:

//.vscode資料夾區域性的設定c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${default}" //只需要加這一行,就是這麼簡單
            ],
            "defines": [],
            "compilerPath": "C:/MinGW/bin/g++.exe", 
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

"${default}"的效果,就是讓區域性設定去呼叫全域性設定中的預設選項,也就是全域性settings.json中的那些設定。

一些有幫助的資訊

  1. 不要直接在sourceforge下載mingw64,很大概率你下載到的是原始碼包,需要在特定環境下之後才能用,在原始碼包裡是找不到g++.exe之類的東西的,不要浪費時間直接去找網路硬碟下編譯好的build。
  2. 解壓build之後,通常放在C槽根目錄下,然後找到系統高階設定,設定環境變數。要注意,如果設定的是系統環境變數而非使用者環境變數時,需要登出後生效,不需要重啟電腦。
  3. 具體includePath是什麼,在設定好環境變數之後,也就是CMD中輸入gcc -v可以看到正常輸出之後,在CMD中輸入gcc -v -E -x c++ -命令,就可以列出所有的include路徑,加上雙引號之後就可以copy到對應的json設定中了。

總結

到此這篇關於VScode中C++標頭檔案問題終極解決方法的文章就介紹到這了,更多相關VScode C++標頭檔案問題解決內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com