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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34347375/article/details/81137962

引言

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

猜你喜欢

转载自blog.csdn.net/qq_34347375/article/details/81137962