使用Docker+Visual Studio 2019搭建Linux C++开发环境

本文介绍VisualStudio在跨平台Linux项目开发中的应用,包括远程编译原理及多人协作时.vcxproj文件配置冲突问题。提出使用Docker创建一致开发环境的解决方案,确保团队成员间无缝协作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从Visual Studio 2017开始,Visual Studio就已经支持跨平台Linux项目的开发。使用它作为开发工具可以很方便的进行开发,调试。它的跨平台开发原理是这样的,通过建立一个Linux工程,这个工程在编译时,拷贝本地代码到远程Linux环境,然后在Linux环境下编译,实际上是一个远程编译的过程。Visual Studio 和Linux远程编译环境好比前后端的关系,前端(Visual Studio)提供用户输入和表现的功能,后端(Linux环境)做真正的编译工作。
Linux C++具体的创建过程可以参考这里:https://blog.youkuaiyun.com/Huoon/article/details/78513125

Visual Studio + Linux 已经可以提供完美的开发环境了,为什么还要使用Docker,事实上前者提供的方案还有一些问题,会给开发造成一定的麻烦。

之前项目中遇到这样一个问题:Visual Studio创建的Linux项目,会有.vcxproj工程文件,这个文件中会有工程相关的配置。比如,头文件包含路径,库文件路径,调试路径等等。有时候我们需要指定这些路径,而不是工程默认设置的路径。当我们自己指定这些路径时,有些要设置成绝对路径,比如要设置调试路径为:/home/user/debug。这种设置,在一个人开发的时候不会有什么问题,当多个人一起开发项目时,大家都要用到工程文件,而每个人的用户环境不一样(/home/user1/debug,/home/user2/debu…)这样就会出现冲突。

当user1用户修改了.vcxproj文件时,里面的路径相关设置都是user1用户的了,当user2用户更新代码后工程文件里面的配置路径都是user1用户的,然后,user2用户不得不去修改这些配置选项。每次修改这些配置,无疑是很麻烦的。

当然,开发时可以不提交.vcxproj文件,这种做法可以避免上面的问题,但是,由于.vcxproj文件中还记录了整个项目的文件目录结构,包含哪些文件等信息。所以,当有人添加或删除项目文件,而由于没有同步.vcxproj文件,另一个人是不知道有哪些文件添加或删除,这样的协作开发方式显然不是我们想要的。

还有一种方法就是:大家都使用同一个用户连接Linux进行开发,比如大家都用user这个用户,但是这样也有问题,大家都会在相同的目录去编译,开发,调试就会有问题。

前面两种方式都有问题,但是,第二种方法中如果相同的用户环境可以隔离起来,其实就能解决以上问题。

一个Linux系统中如何实现拥有多个相同的用户环境,这时我想到了虚拟机,准确的讲应该是当前比较流行的容器技术。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

利用Docker创建一个开发环境的镜像,通过这个镜像创建多个容器,每个容器的环境就是一模一样的。为了通过ssh连接到不同的容器,每个容器的ssh服务映射不同的端口出来。具体的方案如下图:
在这里插入图片描述

### 使用Docker构建C++开发环境 #### 创建基础镜像 为了建立一个适合C++开发的基础环境,可以基于官方的`ubuntu`镜像来创建自定义镜像文件(Dockerfile),其中包含了编译C++程序所需的各种依赖项[^1]。 ```dockerfile FROM ubuntu:latest RUN apt-get update && \ apt-get install -y build-essential cmake git vim WORKDIR /workspace ``` 这段脚本会更新软件包列表并安装必要的组件如`build-essential`(提供GCC/G++)、`cmake`以及一些辅助工具。工作目录被设置为`/workspace`以便于后续项目管理。 #### 构建与启动容器 完成上述配置之后,在命令行执行如下指令以构建新的Docker镜像: ```bash docker build -t cpp_dev_env . ``` 这将会读取当前路径下的Dockerfile,并按照指示逐步组装成名为`cpp_dev_env`的新镜像。接着可以通过下面的方式启动一个新的交互式终端实例: ```bash docker run -it --name my_cpp_container cpp_dev_env bash ``` 此时已经进入了一个预装好所有必需库函数和支持服务的操作环境中去了[^2]。 #### 整合VSCode实现远程开发体验 为了让开发者能够更加高效便捷地利用这个新设立起来的工作空间开展实际编码作业,则推荐采用Visual Studio Code配合其内置插件——Remote Development来进行连接操作[^4]。 首先确认主机端已正确部署完毕[Docker](https://docs.docker.com/get-docker/) 和 [VSCode](https://code.visualstudio.com/docs/setup/linux),随后依照提示下载对应平台版本的应用程序;其次打开编辑器前往市场页面搜索“Remote – Containers”,点击安装按钮获取该功能模块;最后参照官方文档指引链接至之前所创建好的容器内部继续完善剩余环节直至整个流程结束为止。 通过这种方式不仅简化了传统意义上的本地化安装过程所带来的繁琐步骤,同时也使得团队成员之间共享一致性的编程框架成为可能,极大地提高了协作效率和代码质量控制水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值