Mac上使用docker环境进行C++开发的实践

背景

最近换上了mbp作为开发工具,在mbp上默认的c++环境是clang+LLVM那一套工具链,虽然说是相比gnu更加先进,但是因为我的代码经常需要在linux服务器和本机上跑,而clang和gnu的编译器在编译器参数,api支持等方面还是存在一定差异,最简单的libc++和libstdc++的标准库的不同就能浪费大量的时间在上面做兼容。我想了如下几个方案,并最终采用了docker的方案。

  • 把整个mac的编译环境改成gnu那一套,问题:可能导致mac上一些需要编译的工具出现潜在问题
  • 写代码的时候就考虑clang和gnu环境的兼容性,问题:对不同标准库的api不够熟悉,了解的性价比不高
  • 抛弃本地环境,完全在服务器开发,问题:受到网络环境的影响大,调试不够方便
  • 起一个linux的本地docker作为开发环境(完美)

确定使用docker环境开发后,第二个问题是用什么工具开发,如果你只使用vscode,那么你可以先跳过docker镜像制作的部分,vscode已经提供了c++镜像,只需要安装remote插件,就可以达到几乎开箱即用的效果。但是你如果像我一样调试的时候还是喜欢clion的强大功能,那么你可以先从docker镜像制作看起。

docker镜像制作

在我的docker环境中,我采用了比较新自己也比较熟悉的ubuntu作为基础环境,增加了一些常用工具和方便的连接docker所需要的一些工具。完整的docker环境可以在我的github查看docker-cpp-dev-environment

step0: 在mac上安装docker,直接在官网下载一个dmg,安装好,就能在顶栏看到一个小鲸鱼的标志,运行命令行,docker image ls不会报错,说明安装成功

step1: 首先是dockerfile的编写:

# 基础镜像
FROM ubuntu:20.04
# 作者信息版本信息
LABEL version="v2" \
      maintainer="Sunchao <hustcaid@gmail.com>"

# 可用命令行参数配置的boost版本信息
ARG BOOST_VERSION=1.73.0
ARG BOOST_VERSION_=1_73_0
ENV BOOST_VERSION=${BOOST_VERSION}
ENV BOOST_VERSION_=${BOOST_VERSION_}
ENV BOOST_ROOT=/usr/include/boost
# tzdata直接安装时可能需要手动选择时区,添加该环境变量让其不要通过交互,自动选择
ENV DEBIAN_FRONTEND=noninteractive
# apt换源,加快构建速度
COPY sources.list /etc/apt/sources.list

RUN apt-get update
# 安装openssh 和 rsync是用于clion的远程部署和连接docker开发
RUN apt install -y --no-install-recommends tzdata build-essential cmake gdb openssh-server rsync vim git wget

# 配置 sshd和rsnyc, 允许root登陆 关闭usePAM 允许rsnc
RUN mkdir /var/run/sshd
RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config &&  sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config && sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync

# config rsync service
COPY rsync.conf /etc
# 设置root的密码
RUN echo 'root:000000' |chpasswd
RUN mkdir /root/sync
# install boost
RUN wget --max-redirect 3 --no-check-certificate https://dl.bintray.com/boostorg/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_}.tar.gz
RUN mkdir -p /usr/i
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值