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

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

最近的工作主要使用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/^PermitRootLogins+.*/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了




clion创建Python clion写python_clion配置


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

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


clion创建Python clion写python_clion配置_02


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


clion创建Python clion写python_clion配置_03


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


clion创建Python clion写python_clion创建Python_04


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

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


clion创建Python clion写python_clion创建Python_05


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