關於vscode編譯c/c++ 使用c++11的一個解決辦法,針對c和c++混編出現的問題的解決方法 [-fpermissive]出現後如何解決
阿新 • • 發佈:2021-01-11
1. vscode配置c或者c++編譯開發環境,一般情況下足夠了,大概教程網上有很多,但是都隻言片語,留一手.我在採坑無數次之後總結了一些經驗如下
vscode編譯有兩種形式,一種是右鍵,這種形式,使用預設setting,都不知道在哪裡配置的,可控性賊差,並且有一點必須注意,vscode預設只會編譯一個檔案,這一點賊坑(哪個寫c++的只寫一個main檔案)
另一種編譯方式是類似於命令列形式,不同的是,得需要自己寫一些檔案配置啥的,但是有一點好處是可控,如下
2. c與c++混編,可能會出現指標強制轉化,編譯通不過的問題, 網上有說我以上遇到的問題解決方案是加上 CXXFLAGS=-fpermissive
但是加在哪裡也沒說,按照這個方向查詢也沒具體些的資訊,不過我猜測應該是cmake中的內容,
因此在遇到c和c++混編的情況下,我還是建議,儘可能的使用專業的ide,比如virsual studio 2019或者qt,或者clion(我個人推薦clion)
clion安裝 https://www.jianshu.com/p/1aa989808e15
3. 記錄下正常情況下vscode配置c++環境的幾個檔案和步驟
1 在專案根目錄下建立.vscode檔案,並建立兩個資料夾,一個用來debug,一個用來執行指令
launch.json
{ "version": "0.2.0","configurations": [ { "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示 "type": "cppdbg", // 配置型別,這裡只能為cppdbg "request": "launch", // 請求配置型別,可以為launch(啟動)或attach(附加) "program": "${fileDirname}/${fileBasenameNoExtension}.exe",// 將要進行除錯的程式的路徑"args": [], // 程式除錯時傳遞給程式的命令列引數,一般設為空即可 "stopAtEntry": false, // 設為true時程式將暫停在程式入口處,一般設定為false "cwd": "${workspaceRoot}",// 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄 "environment": [], "externalConsole": true,// 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯 "MIMode": "gdb", "miDebuggerPath": "E:\\c-c++\\TDM-GCC-64\\bin\\gdb64.exe",// miDebugger的路徑,注意這裡要與MinGw的路徑對應 "preLaunchTask": "g++", // 除錯會話開始前執行的任務,一般為編譯程式,c++為g++, c為gcc "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }
tasks.json
{ "version": "2.0.0", "tasks": [{ "label": "g++", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.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 } }, "group": { "kind": "build", "isDefault": true } } ] }
2 記得新增環境變數