Linux 音视频开发杂记之一-环境配置使用vscode

开发环境

开发环境选择window10+Visual Studio Code + ubuntu20.64 虚拟机

一Windows 安装

1.安装git for windows

安装过程直接下一步。
主要原因是windows OpenSSH在vs code 下不可用, 安装后需要在环境变量的path/path配置一下git

在这里插入图片描述

2.安装Visual Studio Code

安装过程直接下一步。

3.vscode 安装插件

1 Remote Development
2 C/C++ Themes
3 C/C++ for Visual Studio Code
4 WSL ( Windows Subsystem for Linux )

以上都是必须安装的,否则调试的时候提示cppdbg错误

二 Ubuntu安装

安装编译环境

sudo apt-get install build-essential

安装ssh gdb gdbserver服务

sudo apt-get install openssh-server gdb gdbserver

启动ssh服务

sudo service ssh start

查询ssh服务是否启动

sudo service ssh status

三 vscode连接到ubuntu

四 ubuntu工作区文件目录

建立第一级目录

建立XDEV或者其他,包含_Bin,_Include两个目录,_Bin为输出路径,所有本项目的so,out都输出到该目录一下。

建立工程目录

考虑工程目录可能跨平台使用,故建立如图所示目录,目前只有_Linux有效,如图所示
在这里插入图片描述
其中:
_Linux放Makefile
_Win32放VC++工程文件
src放代码文件.cpp .h

Makefile编写.

参考网上例子,我编写以下通用模板,可以同时编译动态库,可执行文件,包括debug,release,如编译debug只需在编译指定debug=y 例如 make debug=y

CROSS=
CC:=$(CROSS)gcc
CXX:=$(CROSS)/usr/bin/g++
#****************************************************************************
# Include paths
#****************************************************************************
INCS :=-I../../_Include/
#****************************************************************************
# Libs
#****************************************************************************
LIBS:=
#EX:
#LIBS:= -L/home/ubuntu/workzt/ffmpegTomp4/aarch64_lib/ -lavformat -lavcodec -lavfilter -lswscale -lavutil -lswresample -lavdevice -lm -pthread

#****************************************************************************
# Out path paths
#****************************************************************************
OUT_PATH:=../../_Bin/
#****************************************************************************
# Target filename
#****************************************************************************
FILENAME:=libxkernel
#****************************************************************************
# Target file ext-name
#****************************************************************************
EXTNAME:=.so

#****************************************************************************
# ggc args
#****************************************************************************
CFLAGS:=-Wall -O0 -DNDEBUG -Wno-unknown-pragmas -Wno-format -Wno-missing-braces -Wno-maybe-uninitialized  -Wno-unused-but-set-variable 
#****************************************************************************
# g++ args
#****************************************************************************
CXXFLAGS:=-w -std=c++11 -O0 -DNDEBUG -Wno-unknown-pragmas -Wno-format -Wno-missing-braces -Wno-maybe-uninitialized  -Wno-unused-but-set-variable 

#****************************************************************************
# debug options
#****************************************************************************
ifeq ($(debug), y)
$(warning builid as debug)
CFLAGS += -g 
CXXFLAGS+= -g 
FILEFULLNAME:=$(FILENAME)d$(EXTNAME)
#if debug xxx.xx->xxxd.xx
else
$(warning builid as release)
FILEFULLNAME:=$(FILENAME)$(EXTNAME)
endif

#****************************************************************************
# lib or app
#****************************************************************************
ifeq ($(EXTNAME), .so)
$(warning  builid as lib)
CXXFLAGS += -shared 
CXXFLAGS += -fPIC 
else
$(warning builid as app)
endif


#****************************************************************************
# Source files
#****************************************************************************


#SRCS:=$(wildcard ../src/*.cpp)
#SRCS+=$(wildcard ../src/*.c)

SRCS_ALL:=$(shell find ../src -name "*.cpp" -o -name "*.c") 
#过滤的文件,指定哪些源文件不需要编译
FilterFiles_CPP :=
FilterFiles_C := 
FilterFiles := $(FilterFiles_C) $(FilterFiles_CPP)
FilterFiles := $(addprefix %/,$(FilterFiles))
SRCS := $(filter-out $(FilterFiles), $(SRCS_ALL))


#定义宏
DEF=


#****************************************************************************
# Objects
#****************************************************************************
OBJ:=$(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SRCS))) 


#****************************************************************************
# Target
#****************************************************************************

TARGET = $(OUT_PATH)$(FILEFULLNAME)


PHONY :  all clean
all: $(TARGET)
$(TARGET):$(OBJ) 
	$(CXX) $(CXXFLAGS) -o $@ $(OBJ) $(LIBS)
%.o : %.c
	echo "compiling $< ..."
	echo $(TARGET)
	@($(CC) -fPIC -c $(CFLAGS) $(INCS)  $(LIBS) $< -o $@)
%.o : %.cpp
	$(CXX) -fPIC -c $(CXXFLAGS) $(DEF) $(INCS)  $(LIBS) $< -o $@ 
clean :
	@echo "remove temp files(obj)..."
	@rm $(OBJ)
	@echo "Compilation succeeded! out file is:" $(TARGET) 


五 vscode 工作区配置

tasks.json

{
	// 有关 tasks.json 格式的文档,请参见
	// https://go.microsoft.com/fwlink/?LinkId=733558
	//
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "make file",
			"command": "make",
			"args": [],
			"options": {
				"cwd": "${workspaceFolder}/_Linux"
				//指定Makefile所在的路径
			},
			"group": "build"
		},
		{
			"type": "shell",
			"label": "make file debug",
			"command": "make",
			"args": [
				"debug=y"	
				//指定debug模式
			],
			"options": {
				"cwd": "${workspaceFolder}/_Linux"
				//指定Makefile所在的路径
			},
			"group": "build"
		},
		{ //删除二进制文件
			"type": "shell",
			"label": "delete output file",
			"command": "rm",
			"args": [
				"${fileDirname}/${fileBasenameNoExtension}"
			],
			"presentation": {
				"reveal": "silent", //删除过程不切换终端(专注程序输出)
			}
		}
	]
}

tasks.json文件 task数组包含3个元素,分别为编译release,编译debug,和删除临时文件。

launch.json

tasks.json修改完毕后,我们要在launch.json 建立对于的任务,配置如下。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            //使用MAKEFILE
            "name": "make file debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/../_Bin//eglshowbmpd.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/111/XDEV/_Bin",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make file debug",
            "miDebuggerPath": "/usr/bin/gdb"
            
        },
        {
            //使用MAKEFILE
            "name": "make file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/../_Bin//eglshowbmp.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

其中重要的参数为:
name:这与task.json->label中一一对应,必须准确

program:可执行文件路径,如果使用相对路径,只能使用${workspaceFolder}/…/,特别注意使用相对路径远程调试时会提示找不到文件,建议使用绝对路径,如/HOME/XXX/XDEV

cwd:工作路径,建议使用绝对路径

到此,环境搭建完毕,下一篇使用FFMEPG解码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KL_FLSHMAN

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值