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.mzph.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…