vscode C++ 分文件、文件夾編譯配置與錯誤解決

文章目錄

    • 問題
      • include
      • source
      • out
    • 配置過程遇到的問題與解決
      • 遇到的問題1
      • 解決步驟
        • 1. ctrl + shift + p
        • 2. 配置json文件
          • 修改task.json文件
          • 修改launch.json
    • 可能遇到的錯誤
      • 1. collect2: error: ld returned 1 exit status
      • 2. /mnt/d/tmp/c++/source/add.cpp:3:10: fatal error: add.h: No such file or directory
      • c_cpp_properties.json

問題

如下圖文件夾

> include: *.h文件
> out: 編譯后的輸出文件夾
> source:*.cpp文件

在這里插入圖片描述
先看看我們的幾個文件夾里有什么文件,還有文件里有什么內容。

include

  • add.h
    • 這里就是add()函數的聲明
    • 還需要要加上 int test_add();這個聲明
      在這里插入圖片描述

source

  • main.cpp
    • 簡單的一個程序入口
      在這里插入圖片描述
  • add.cpp
    • 這里是我們主要的程序部分,定義了幾個add()函數。還有test_add()函數
    • 還需要#include “add.h”
      在這里插入圖片描述

out

  • 現在還沒有編譯過,所以為空

那我們要怎樣配置vscode里的一些環境呢?

配置過程遇到的問題與解決

遇到的問題1

identifier "test_add" is undefinedC/C++(20)

說白了,就是test_add這個標識符不能識別(沒有定義),可我們從上面的文件里看到了,該函數都是有的。再往下看,我們一個一個來解決。

解決步驟

1. ctrl + shift + p

然后選擇如下箭頭所指示
在這里插入圖片描述
在這里插入圖片描述

出現如下,選擇Debug Anyway
在這里插入圖片描述
完成這一步了,我們可以參文件下面,會有一個.vscode的文件夾,還有兩個.json的文件。
在這里插入圖片描述

2. 配置json文件

修改task.json文件

默認的如下,主要要修改三個地方

  1. 添加 -I,及-I對應的文件夾 (include)
  2. 修改 -o,及-o對文件夾 (out)
  3. 修改-g,及-g對應的文件(source)
{"tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "/usr/bin/g++","args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

修改如下

{"tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "/usr/bin/g++","args": ["-g","${workspaceFolder}/source/*.cpp", //all cpp from source"-I", //include"${workspaceFolder}/include", //include path"-o","${workspaceFolder}/out/${fileBasenameNoExtension}" //out path],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}
修改launch.json

默認的launch.json如下,
只需要修改2版主即可

  1. “program” 后的屬性,修改成與tasks.json -o 后的屬性一樣
  2. “cwd”: 屬性修改為 “${workspaceFolder}/out”
{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file","miDebuggerPath": "/usr/bin/gdb"}]
}

修改如下,都已經加注釋了

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "g++ - Build and debug active file","type": "cppdbg","request": "launch","program": "${workspaceFolder}/out/${fileBasenameNoExtension}", //program output name, same as tasks.json -o path"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}/out", //out here is the folder named out"environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file","miDebuggerPath": "/usr/bin/gdb"}]
}

保存以上文件后,已經不報錯了

  • F5: 調試程序
  • CTRL+F5:運行程序
  • ctrl + shift + B (build)

在這里插入圖片描述

可能遇到的錯誤

1. collect2: error: ld returned 1 exit status

/usr/bin/g++ -g /mnt/d/tmp/c++/source/main.cpp -I /mnt/d/tmp/c++/include -o /mnt/d/tmp/c++/out/main
/tmp/ccBwxewk.o: In function `main':
/mnt/d/tmp/c++/source/main.cpp:8: undefined reference to `test_add()'
collect2: error: ld returned 1 exit status

tasks.json -g 后面的參數改為 “${workspaceFolder}/source/*.cpp”

2. /mnt/d/tmp/c++/source/add.cpp:3:10: fatal error: add.h: No such file or directory

Starting build...
/usr/bin/g++ -g /mnt/d/tmp/c++/source/*.cpp -o /mnt/d/tmp/c++/out/main
/mnt/d/tmp/c++/source/add.cpp:3:10: fatal error: add.h: No such file or directory#include "add.h"^~~~~~~
compilation terminated.
/mnt/d/tmp/c++/source/main.cpp:2:10: fatal error: add.h: No such file or directory#include <add.h>^~~~~~~
compilation terminated.Build finished with error(s).
The terminal process failed to launch (exit code: -1).

tasks.json 加上"-I", “${workspaceFolder}/include”,

c_cpp_properties.json

c_cpp_properties.json配置文件默認是不會產生的,ctrl+shift+p 再輸入configuration選擇后便會出現。
在這里插入圖片描述

在這里我們可以設置 includePath

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","${workspaceFolder}/include/**"  //your include path],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "gnu++14","intelliSenseMode": "linux-gcc-x64"}],"version": 4
}

注:請注意,這里使用是的WSL環境下的g++。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260435.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260435.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260435.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gc就是fullgc嗎 major_線上出現fullgc問題如何排查?

1.問題描述線上出現fullgc報警&#xff0c;每5分鐘一次2.背景知識1. 程序執行了System.gc()執行了jmap -histo:live pid命令 在執行minor gc的時候進行的一系列檢查 執行Minor GC的時候&#xff0c;JVM會檢查老年代中最大連續可用空間是否大于了當前新生代所有對象的總大小。 …

修改 jquery.validate.js 支持非form標簽

嘗試使用markdown來寫一篇blog&#xff0c;啦啦啦 源代碼傳送門&#xff1a;github 在特殊情況下我們使用jquery.validate.js對用戶輸入的內容做驗證的時候&#xff0c;表單并不是一定包含在form之中&#xff0c;有可能是一個div彈層&#xff0c;有可能是嵌套在form里面的一個d…

Linux常用文件和目錄操作

cd:變換目錄pwd:顯示弼前目錄mkdir:建立一個新目錄rmdir:刪除一個空目錄 cp&#xff1a;復制目錄或者文件 mv&#xff1a;移動文件或者目錄 rm&#xff1a;刪除文件或者目錄 轉載于:https://www.cnblogs.com/lijingpeng/archive/2012/09/07/2675982.html

淘淘商城項目mysql服務器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城項目環境搭建 ]...

背景&#xff1a;淘淘商城項目的環境搭建說明&#xff1a;采用SpringMVCSpringMybatisMysqlMavenSvn結構搭建&#xff0c;在開發之中可以參考其結構和搭建步驟去搭建實際的工程項目工程結構簡圖&#xff1a;項目結構&#xff1a;---------------------------------------------…

bean validation校驗方法參數_項目啟動時首先校驗Spring Boot配置參數

1. 概述在項目實際開發過程中&#xff0c;為了更好的復用&#xff0c;我們參考Spring Boot Starters&#xff0c;封裝了許多企業內部中間件的starter。這些中間件的接入都需要申請并在項目中配置一些特定的參數。我們通過ConfigurationProperties注解&#xff0c;增加了在配置過…

進一步理解:inline-block,vertical-align,line-height

看似三個最常見的概念背后卻隱藏了很深的很深“水” 那有多深呢&#xff0c;先來看下面的代碼 引出問題 <style>.inline-block {display: inline-block;}.border {border: 1px solid #000000;}.span {width: 100px;height: 100px;}.bak {background: #33CCFF;} .o-hidden…

刷系統——黑屏問題

引用&#xff1a;http://www.miui.com/thread-344361-1-1.html 此貼大部分內容源自魔趣論壇V大的帖子&#xff0c;本人經過整理后發出&#xff0c;特此聲明原帖地址&#xff1a;http://bbs.mfunz.com/thread-172610-1-1.html——此貼獻給小白們&#xff0c;老鳥一笑而過吧近期有…

LeetCode OJ - Recover Binary Search Tree

題目&#xff1a; Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note:A solution using O(n) space is pretty straight forward. Could you devise a constant space solution? 解題思路&#xff…

mysql中間件是運維工作內容_linux運維工作的七項內容

一&#xff0c;【基礎運維檢查】或叫 例行檢查 或叫 例行巡檢mail cacti1.理解例行檢查列表的內容、檢查項的含義以及可能引發的問題。2.按照例行檢查表&#xff0c;定期檢查系統狀態&#xff0c;發現異常立即通報并推進解決。3.定期檢查線上服務模塊&#xff0c;排除可疑進程,…

java executor_Java并發編程(08):Executor線程池框架

一、Executor框架簡介1、基礎簡介Executor系統中&#xff0c;將線程任務提交和任務執行進行了解耦的設計&#xff0c;Executor有各種功能強大的實現類&#xff0c;提供便捷方式來提交任務并且獲取任務執行結果&#xff0c;封裝了任務執行的過程&#xff0c;不再需要Thread().st…

Exchange 2007遷移Exchange 2010應該注意的13件事

1. Exchange 2007可以支持升級到Exchange 2010&#xff0c;但需要提前將Exchange 2007所有服務器環境升級至 SP2或以上版本。2. Exchange 2007如果更新至SP2或以上版本&#xff0c;則建議按照以下順序進行各角色的更新&#xff1a; CAS、UM、HUB、Edge、Mailbox。3. …

dom4j操作XML

(一&#xff09;創建Document的基本操作 /** * XML基本操作 */ public void BaseOperation(){ //創建一個document Document documentDocumentHelper.createDocument(); //創建根結點 Element rootdocument.addElement("root"); //為根結點添加一個book節點 Element …

Oracle數據庫中閃回恢復的詳細分析

Oracle9i開始提供閃回查詢&#xff0c;以便能在需要的時候查到過去某個時刻的一致性數據&#xff0c;這是通過Undo實現的。這個功能有很大的限制&#xff0c;就是相關事務的undo不能被覆蓋&#xff0c;否則就無力回天了。oracle10g大大的增強了閃回查詢的功能&#xff0c;并且提…

python 查看當前目錄_「Python」打包分發工具setuptools學習

?setuptools是python標準的打包分發工具&#xff0c;它可以將我們編寫的python項目打包安裝&#xff0c;這樣其他同事就可以像調用標準庫或python第三方庫那樣直接使用&#xff1b;也可以將項目上傳到Pypi供更多人的下載安裝使用。?1. 項目結構項目結構?這是一個打包構建好的…

如何殺掉D狀態的進程?[zt]【轉】

轉自&#xff1a;http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何殺掉D狀態的進程zt相關博文原貼:http://www.xclinux.cn/?p752 如何殺掉D狀態的進程&#xff1f;[zt] 狀態為 D (Uninterruptible sleep) &#xff0c;以及狀態為 Z (Zombie)這些垃圾進程…

九月十月百度人搜,阿里巴巴,騰訊華為筆試面試八十題(第331-410題)

九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;騰訊華為小米搜狗筆試面試八十題 &#xff08;參與算法&面試題交流與討論&#xff0c;請加群&#xff1a;30382647&#xff09;引言 自發表上一篇文章至今&#xff08;事實上&#xff0c;上篇文章更新了近3個月之久&#…

mysql性能結構優化原理_MySQL性能管理及架構設計(二):數據庫結構優化、高可用架構設計、數據庫索引優化...

一、數據庫結構優化(非常重要)1.1 數據庫結構優化目的1、減少數據冗余&#xff1a;(數據冗余是指在數據庫中存在相同的數據&#xff0c;或者某些數據可以由其他數據計算得到)&#xff0c;注意&#xff0c;盡量減少不代表完全避免數據冗余&#xff1b;2、盡量避免數據維護中出現…

python git是什么_python爬蟲之git的使用

一、簡單認識&#xff1a; 1、初始化文件夾為版本控制文件夾&#xff0c;首先建立一個文件夾&#xff0c;進入這個文件夾以后輸入git init初始化這個文件夾。2、Git幾種位置概念 1、本地代碼&#xff1a;本地更改完代碼以后&#xff0c;雖然是存放在git的文件夾里面&#xff0c…

產品經理網站數據分析之測量問題現狀(二)

本章續接上文&#xff0c;主要講解流程圖的繪制要領&#xff0c;以及示例。 1、基礎流程圖 基礎流程圖應該簡明扼要地描述出流程的主要結構&#xff0c;在弄清楚流程的起點、終點&#xff0c;以及主要步驟后&#xff0c;按照流程的先后順序&#xff0c;按照要展示的流程長短比例…

鍵盤流的逆襲- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安裝配置 Idea 的 vim 插件 先挖坑&#xff0c;后續再填。這個毫無技術含量&#xff0c;不寫了&#xff0c;自己去搜吧。 快捷鍵代替鼠標 打開文件 按兩下 shift 鍵 > 輸入類目文件名按 command e &#xff0c;打開最近編輯的文件列表&a…