VSCode的多个(C/C++)源文件的编译运行(Linux)

2023-05-16

引言

VSCode作为微软推出的一款免费的轻量级的集成开发环境,可谓是良心之作。它拥有VS的高颜值,而且像瑞士军刀一样,拥有丰富的插件,c/c++、java、python、js、html等等,它都能轻松驾驭。
在这里介绍关于多个C/C++源文件在VSCode编译运行的方式方法,这里会用到makefile以及Opencv.
注意:这里默认你已经在Linux系统上配置好了Opencv环境,只有这样你才能成功运行实例程序。
Linux安装Opencv参考链接:https://blog.csdn.net/qq_34347375/article/details/81137142

目录

    • 引言
    • 目录
    • 安装
    • 配置
    • 编写源程序
    • 运行

安装

在Linux中如何安装VSCode就不在这里赘述。
如果想在VSCode中编译运行C/C++,建议安装这四个插件:

  • C/C++
  • C++ Intellisense
  • Code Runner
  • Include Autocomplete
    image_1cirkvga417v61ohpf7982r1mer29.png-85.1kB

配置

在写程序之前先进行一些基础的配置.
进入VSCode的用户设置,设置一下参数:

  • code-runner.executorMap
    因为我们是通过makefile文件来进行编译链接源程序的,所以在这里更改如下:
"c": "cd $dir && make $fileNameWithoutExt && ./$fileNameWithoutExt && make clean",
"cpp": "cd $dir && make $fileNameWithoutExt && ./$fileNameWithoutExt && make clean",

image_1ciroqbp41f1218og1qof13ds13ri9.png-178.2kB
+ code-runner.runInTerminal

"code-runner.runInTerminal": true

这是为了保证能够从终端输入。

编写源程序

我们创建这四个源文件。代码分别如下:

.
├── main.cpp
├── makefile
├── multifile.cpp
└── multifile.hpp
// main.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
#include "multifile.hpp"
using namespace std;
using namespace cv;

int main()
{
    MultiFile *m = new MultiFile;
    m->showstr();
    VideoCapture testCamera;
    testCamera.open(0);
    int n = 100;
    while(n){
        Mat src;
        testCamera >> src;
        imshow("test", src);
        waitKey(30);
        n--;
    }
    delete m;
    return 0;
}
// multifile.hpp

#pragma once
#include <iostream>
using namespace std;

class MultiFile
{
private:
    /* data */
public:
    MultiFile(/* args */);
    ~MultiFile();
    void showstr();
};
//multifile.cpp

#include "multifile.hpp"

MultiFile::MultiFile(/* args */)
{
    cout << "multifile constructed function" << endl;
}

MultiFile::~MultiFile()
{
    cout << "mutifile destructor" << endl;
}

void MultiFile::showstr()
{
    cout << "show some string" << endl;
}
# makefile

# 描述: multifile 项目 makefile文件
# 版本: v1.0
# 修改记录:  1.先测试普通的cpp文件的编译运行
#           2.使用变量来改进我们的makefile文件
#           3.新加了一个源文件
#           4.使用伪目标,加上clean规则
#           5.使用wildcard函数,自动扫描当前目录下的源文件
#           6.加入了自动规则依赖

# # 定义了可执行文件变量
# executable    := main
# # 定义了源文件列表变量
# sources := $(wildcard *.cpp)
# # 使用变量的引用替换,定义了object文件列表
# objects := $(sources:.cpp=.o)
# # 使用变量引用替换,定义依赖文件列表
# deps  := $(sources:.cpp=.d)
# # 定义编译命令变量
# CC    := g++
# rm    := rm -rf
# # 终极目标规则,生成可执行文件
# $(executable) : $(objects)
#   $(CC) -o $@ $^

# $(objects): %.o:%.cpp 
#   $(CC) -o $@ -c $<

# #clean规则 
# .PHONY: clean
# clean:
# #清除编译生成的所有文件
# #$(RM) $(executable) $(objects) $(deps)
# #清除编译生成的所有文件,不包括可执行文件
#   $(RM) $(objects) $(deps)

# # 自动规则依赖
# sinclude $(deps)
# $(deps):%.d:%.cpp
#   $(CC) -MM $< > $@

# 描述: multifile 项目 makefile文件
# 版本: v2.0
# 修改记录:  1.先测试普通的cpp文件的编译运行
#           2.使用变量来改进我们的makefile文件
#           3.新加了一个源文件
#           4.使用伪目标,加上clean规则
#           5.使用wildcard函数,自动扫描当前目录下的源文件
#           6.加入了自动规则依赖
#           7.实现了opencv程序的编译
# 定义了可执行文件变量
executable  := main
# 定义了源文件列表变量
sources := $(wildcard *.cpp)
# 使用变量的引用替换,定义了object文件列表
objects := $(sources:.cpp=.o)
# 使用变量引用替换,定义依赖文件列表
deps    := $(sources:.cpp=.d)
# 定义编译命令变量
CC  := g++
rm  := rm -rf

#需要调用的链接库
LIBS    :=  -lopencv_calib3d \
            -lopencv_core \
            -lopencv_dnn \
            -lopencv_features2d \
            -lopencv_flann \
            -lopencv_highgui \
            -lopencv_imgcodecs \
            -lopencv_imgproc \
            -lopencv_ml \
            -lopencv_objdetect \
            -lopencv_photo \
            -lopencv_shape \
            -lopencv_stitching \
            -lopencv_superres \
            -lopencv_video \
            -lopencv_videoio \
            -lopencv_videostab
# 头文件路径
INCLUDE :=  -I/usr/local/include/opencv \
            -I/usr/local/include/opencv2
# 链接库路径
LDFLAGS :=  -L/usr/local/lib
# 终极目标规则,生成可执行文件
$(executable) : $(objects)
    $(CC) -o $@ $^ $(LDFLAGS) $(LIBS)

$(objects): %.o:%.cpp 
    $(CC) -o $@ -c $< $(INCLUDE)

#clean规则 
.PHONY: clean
clean:
#清除编译生成的所有文件
#$(RM) $(executable) $(objects) $(deps)
#清除编译生成的所有文件,不包括可执行文件
    $(RM) $(objects) $(deps)

# 自动规则依赖
sinclude $(deps)
$(deps):%.d:%.cpp
    $(CC) -MM $< > $@

注意:

  • Code runner插件应当在main.cpp文件下使用,并且makefile文件中可执行文件名称要与之一致。具体情况请看插件说明。
  • 这里提供了两个版本的makefile文件内容,一个是针对单纯的多文件c/c++源程序的编译连接,一个是针对包含opencv源程序的编译链接。

运行

运行结果如下:
image_1cirp1c521bno11961ijn1be2crt1m.png-459.6kB

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VSCode的多个(C/C++)源文件的编译运行(Linux) 的相关文章

  • 【3D视觉】深度摄像头与3D重建

    1 xff0c Kinect 是微软在2010年6月14日对XBOX360体感周边外设正式发布的名字 大家在上图可以看到 xff0c Kinect两端有两个3D深度摄像头 xff0c 左边那个发射红外线 xff0c 右边那个是一个红外线感应
  • 【3D视觉】realsense D435三维重建

    1 xff0c 硬件 xff1a realsense D435 驱动及SDK开发包安装 GitHub IntelRealSense librealsense Intel RealSense SDK 下载最新驱动 安装后打开 Intel Re
  • ssh: connect to host 10.112.1.5 port 10083: Connection refused

    ssh connect to host 10 112 1 5 port 10083 Connection refused 1 查看已知端口占用情况 我们想知道10083端口的使用情况 xff0c 或者说被谁占用了 xff0c 命令如下 xf
  • Unity之将Texture保存成png

    using UnityEngine using System Collections using System IO public class SaveToPng MonoBehaviour public Shader outShader
  • 基于容器训练OpenPCdet

    基于容器训练OpenPCdet 1 先拉取一个运行的镜像 docker pull djiajun1206 pcdet pytorch1 6 2 基于镜像创建一个容器 nvidia docker run it name pcdet privi
  • 【CUDA入门笔记】概述

    1 xff0c CUDA架构 xff08 1 xff09 一个GPU包含多个多核处理器 xff1b xff08 2 xff09 一个多核处理器包含多个线程处理器 xff08 3 xff09 线程处理器是最基本的计算单元 xff0c 有自己的
  • 【CUDA入门笔记】CUDA内核与线程配置

    1 CUDA核函数 在GPU上调用的函数成为CUDA核函数 Kernel function xff0c 核函数会被GPU上的多个线程执行 每个线程都会执行核函数里的代码 xff0c 当然由于线程编号的不同 xff0c 执行的代码路径可能会有
  • 【CUDA入门笔记】GPU存储结构模型(1)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf
  • 【CUDA入门笔记】GPU存储结构模型(2)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf
  • 基于多二维码识别的无人机运动真值获取

    基于多二维码识别的三维运动真值获取 1 背景介绍2 原理2 1 二维码基础2 2图像预处理2 3 定位标轮廓提取2 4 多二维码鲁棒识别 3 运行结果3 1对单张图片进行多二维码识别3 2 获取一系列静止图片的轨迹3 3 相机做圆周运动的轨
  • c++实现简单http服务器

    http基于tcp协议的应用层协议 xff0c 说白了就是写死的自定义协议 xff0c 代码实现了简单的get请求 xff0c 打开服务后 xff0c 可以通过网站访问本地资源 xff0c 适合新手学习的简单代码 xff0c 有助于理解ge
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • 倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿

    倾斜补偿的电子罗盘 1 xff1a 地磁场 xff0c 磁传感器 xff0c 倾斜补偿 地磁场和磁传感器 地磁场可以用于获取方位信息 以北半球为例 xff0c 地磁场方向不是与地面水平 xff0c 而是与水平方向有一定的倾角 xff08 指
  • vscode常用插件

    vscode常用插件 1 Markdown All In One 在所有拓展插件中 xff0c 这个插件基础功能最全 xff0c 快捷键多 xff0c 方便使用 2 Markdown Toc 这个插件是用来生成目录 xff0c 这个插件我用
  • typescript中使用字典Dictionary

    key为string value为number var map key string number 61 34 t 34 3 34 o 34 5 34 g 34 10 for let k in map egret log map k
  • Qt Design Studio社区版安装与使用

    Qt Design Studio社区版免费下载 由于登录官网不能下载 xff0c 找到镜像网站进行下载 xff1a 基于msvc 2019 64位 xff1a http iso mirrors ustc edu cn qtproject o
  • vscode用conda配置Python虚拟环境

    1 到官网下载Anaconda2 下载vscode中Python插件3 以管理员身份运行vscode4 利用conda创建python虚拟环境5 在vscode中配置Setting json添加Python路径6 最后检验运行Python项
  • 阿里云搭建ftp服务器+FileZilla客户端查看文件

    文章目录 1 阿里云搭建ftp服务器1 1 安装ftp服务器1 2 设置阿里云ECS的安全组 2 FileZilla客户端查看文件 1 阿里云搭建ftp服务器 1 1 安装ftp服务器 1 安装vsftp xff0c sudo span c
  • QtCreator+windows崩溃定位分析

    文章目录 一 Qt程序Release版本记录崩溃信息 xff0c 并定位问题代码1 Release版本程序中生成pdb调试信息文件2 添加代码将程序崩溃时的堆栈保存为crash dmp文件3 使用 WinDbg 分析crash dmp文件
  • Qt项目入门

    一个简单的项目 该项目涉及tcp服务端客户端通信 xff0c 数据库操作 xff0c Log4Qt日志打印 xff0c 不过是关于工业与上位机的一个简单项目处理 xff0c 过程不一定容易理解 xff0c 附上通讯协议 Qt5 12 Min

随机推荐

  • delete this注意事项

    参考资料 在类中调用delete this问题
  • c++较常用的库函数

    不知道原创是谁 xff0c 转载自 xff1a https blog csdn net laozhuxinlu article details 51878947 C 43 43 常用库函数 如图1所示 xff0c 常用数学函数 头文件 in
  • 学习c++的50个网站

    原 xff1a http blog chinaunix net uid 20548989 id 2979724 html 大家都说学Java好找工作 xff0c 可是Java我都遗忘好久了 xff0c 大一大二荒废了 xff0c 没好好练编
  • 数据预处理-数据清洗之numpy创建及属性

    什么是数据预处理 xff1f 数据预处理 xff08 data preprocessing xff09 是指在主要的处理以前对数据进行的一些处理 一般我们得到的数据会存在有缺失值 重复值等 xff0c 在使用之前需要进行数据预处理 它是一系
  • 数据预处理-数据清洗之numpy访问与计算

    如何访问numpy数组中的元素 xff1f 采用索引或者切片的方式 span class token comment 导入包 span span class token keyword import span numpy span clas
  • Unity Spine 换图(通过外部图片)

    在spine中 xff0c 如果想通过外部一张单独的来替换动画中的某个部位 xff0c 需要手动创建Attachment using UnityEngine using System Collections using Spine Unit
  • stm32 esp8266 ota升级-hex合并-烧录-bin生成

    stm32 esp8266 ota系列文章 xff1a stm32 esp8266 ota 快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级 tcp模拟http stm32 esp8266 o
  • 字符串与字符数组的大小

    验证字符串与字符数组的大小 xff0c 代码如下 xff1a include lt stdio h gt int main 字符串与字符数组的区别 int data 61 1 2 3 4 5 char cdata 61 39 h 39 39
  • 数据预处理-数据清洗之pandas库的简单使用

    创建一个series span class token comment 导入包 span span class token keyword import span numpy span class token keyword as span
  • Minimum Snap轨迹规划详解(1)轨迹规划

    一 轨迹规划是什么 xff1f 在机器人导航过程中 xff0c 如何控制机器人从A点移动到B点 xff0c 通常称之为运动规划 运动规划一般又分为两步 xff1a 1 路径规划 xff1a 在地图 xff08 栅格地图 四 八叉树 RRT地
  • RealsenseD415/D435深度相机常用资料汇总

    1 Realsense SDK 2 0 Ubuntu 16 04 安装指导网址 https github com IntelRealSense librealsense blob master doc distribution linux
  • C++STL详解三:迭代器

    C 43 43 STL详解三 xff1a 迭代器 文章目录 C 43 43 STL详解三 xff1a 迭代器前言一 迭代器是什么二 迭代器的案例 xff1a List迭代器的简化版代码1 简单分析List的储存方式2 List的迭代器 三
  • cpp-httplib库的简介与工作流程

    A C 43 43 11 single file header only cross platform HTTP HTTPS library It s extremely easy to setup Just include the htt
  • audiowrite函数用法(matlab)

    audiowrite函数用法 xff08 matlab xff09 一 xff0c 语法 1 2 audiowrite filename y Fs audiowrite filename y Fs Name Value 二 xff0c 解释
  • 5G协议 基本架构 专有名词简称和缩写

    1 先来两个5G架构图 专有名词解释 xff1a 5GC 5G generation core Network 5G核心网络 NG RAN Next generation radio access network 下一代无线接入网络 AMF
  • 加速度计和陀螺仪互补滤波(转载)

    简单易懂的理解 xff1a 这么说吧 xff0c 加速度计计算出来的角度干扰比较大 xff0c 波形比较杂乱 xff0c 陀螺仪融合出来的波形比较平稳但是存在积分漂移 xff0c 所以二者结合 陀螺仪测量角速度积分的基础上利用加速度计测量的
  • 关于精度、分辨率、LSB的理解

    1 精度 是用来描述物理量的准确程度的 精度有关的有两个很重要的指标 xff1a DNL INL DNL xff1a Differencial NonLiner 微分非线性度INL xff1a Interger NonLiner 积分非线性
  • MPU6050教程(转载)

    如果你想玩四轴 xff0c 想搞什么空中鼠标 xff0c 平衡车等待 xff0c 那么MPU6050真的是太强大了 xff0c 能做很多东西 但是论坛上MPU6050整个教学过程基本上是没有的 xff0c 资源共享 xff0c 不应该只在自
  • Swift 中使用SDWebImage

    SDWebImage是开发中常用的插件 xff0c 主要用于加载外部图片 xff0c 具有缓存图片资源的功能 xff0c 然而SDWebImage是由Object C所写 步骤 xff1a 下载SDWebImage https github
  • VSCode的多个(C/C++)源文件的编译运行(Linux)

    引言 VSCode作为微软推出的一款免费的轻量级的集成开发环境 xff0c 可谓是良心之作 它拥有VS的高颜值 xff0c 而且像瑞士军刀一样 xff0c 拥有丰富的插件 xff0c c c 43 43 java python js htm