版权声明:本文为博主原创文章,未经博主允许不得转载。 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
配置
在写程序之前先进行一些基础的配置.
进入VSCode的用户设置,设置一下参数:
- code-runner.executorMap
因为我们是通过makefile文件来进行编译链接源程序的,所以在这里更改如下:
"c": "cd $dir && make $fileNameWithoutExt && ./$fileNameWithoutExt && make clean",
"cpp": "cd $dir && make $fileNameWithoutExt && ./$fileNameWithoutExt && make clean",
+ 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源程序的编译链接。
运行
运行结果如下: