利用Docker和CLion在Mac优雅地开发和调试Linux C++程序

最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。

今天先更新一篇简单的教程,写个开发的小技巧,工欲善其事必先利其器(嘻嘻)。

最近的工作主要使用C++进行开发,作为Android开发者,肯定是对JetBrains全家桶情有独钟(不过说实在的JetBrains家的产品确实很好用),所以IDE肯定是首选Clion。

我现在的开发电脑是Mac,工作需要Linux环境。虽然说Mac和Linux有很多相似的地方,但是对于最近的工作所涉及到的系统机制来说,Mac和Linux还是非常不一样的,并且Clion在Mac和Linux环境中的代码高亮和提示也不一样,除此之外还有诸多限制。最开始的做法是在Mac里装了Ubuntu虚拟机,然后在虚拟机里做开发,但是毕竟是虚拟机,体验还是有些不好。后来发现了Clion的远程开发功能,顾名思义就是在本地写代码,在远程服务器上编译和调试。

但是,租一台服务器成本太高了,而且如果是真远程的话,调试的速度会受到影响。因此决定在利用Docker“虚拟”一个Ubuntu环境。

Docker没安装的话搜一下吧,几行命令就可以了

首先贴上Dockerfile

FROM ubuntu:16.04

RUN apt-get update

RUN apt-get install -y build-essential
RUN apt-get install -y cmake
RUN apt-get install -y gdb

RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config

RUN apt-get install -y rsync
RUN sed -ri 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/g' /etc/default/rsync
COPY rsync.conf /etc

RUN echo 'root:000000' |chpasswd

RUN mkdir /root/sync

COPY entrypoint.sh /sbin
RUN chmod +x /sbin/entrypoint.sh
ENTRYPOINT [ "/sbin/entrypoint.sh" ]

稍微解释一下:

  1. 因为ubuntu官方的Docker镜像什么都没有,所以肯定要先把C++开发环境装好
  2. 然后Clion利用SSH来在本地操作远程服务器和上传下载文件,所以ssh server要装一下
  3. 接下来这个rsync也很重要,clion的官方解释是用来同步文件的,一开始我没有装这个,cmake-build文件夹死活同步不下来,这个rsync需要一个配置文件,我等一下贴在下面
  4. 这个之后给root用户设置一个密码
  5. 在创建一个文件夹用来存放代码

这里还需要说明的是,因为仅仅是一个本地Linux环境而已,所以一切操作都用的是root账户,而没有创建其他账户。

rsync需要一个配置文件
rsync.conf很简单

# 编辑配置信息
max connections = 8
log file = /var/log/rsync.log
timeout = 300

[sync] # 模块名
comment = sync
# path为需要同步的文件夹路径
path = /root/sync
read only = no
list = yes
uid = root
gid = root

注意path一定要和之后的clion中设置一样

还有一个entrypoint.sh就两行启动代码:

#!/bin/bash

/usr/bin/rsync --daemon --config=/etc/rsync.conf
/usr/sbin/sshd -D

接下来创建好docker镜像之后就可以用docker-compose启动了

version: "3"

services:
  env:
    image: linux-env:latest
    container_name: linux-env
    ports:
      - "45678:22"
      - "8730:873"
    cap_add:
      - ALL

这里22是ssh端口,873是srync端口,下面这个cap_add一定要写,不然会导致ptrace无法正常调用,导致GDB不工作。

docker镜像启动之后,需要设置Clion了

Toolchains

  1. 首先选中Toolchains
  2. 添加一个Toolchains
  3. 选择Remote Host
  4. 点击配置
  5. 根据刚才Docker中的配置填写

然后切换到Cmake, 点击新建,注意Toolchain一定要选择刚刚创建好的远程Toolchain

CMake

接下来切换到Deployment,点击新建,然后按照Docker的配置填写

Deployment

接着切换到Mappings选项卡,Local Path就是项目地址,Deployment path就是远程地址,Local Path的文件会上传到Deployment Path,然后在远程编译

Mappings

配置完成之后,记得Resync一下项目。

最后,点击Configurations,选择刚刚创建的cmake环境即可进行切换切换(因为这里只做演示,没有实际再配置一遍,就P了个图)

Configurations

现在,就可以愉快地进行Linux C++的开发了。如果把Docker在Windows上生成一遍的话,应该也是没什么问题的。使用下来,可以感觉到确实比开一个虚拟机要节省资源的多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360