最近在做一些新的东西,所以学习了一些新的东西,也对旧知识加强了很多,所以终于有东西可以记录一下了。
今天先更新一篇简单的教程,写个开发的小技巧,工欲善其事必先利其器(嘻嘻)。
最近的工作主要使用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" ]
稍微解释一下:
- 因为ubuntu官方的Docker镜像什么都没有,所以肯定要先把C++开发环境装好
- 然后Clion利用SSH来在本地操作远程服务器和上传下载文件,所以ssh server要装一下
- 接下来这个
rsync
也很重要,clion的官方解释是用来同步文件的,一开始我没有装这个,cmake-build文件夹死活同步不下来,这个rsync需要一个配置文件,我等一下贴在下面 - 这个之后给root用户设置一个密码
- 在创建一个文件夹用来存放代码
这里还需要说明的是,因为仅仅是一个本地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
- 添加一个Toolchains
- 选择Remote Host
- 点击配置
- 根据刚才Docker中的配置填写
然后切换到Cmake, 点击新建,注意Toolchain一定要选择刚刚创建好的远程Toolchain
接下来切换到Deployment,点击新建,然后按照Docker的配置填写
接着切换到Mappings选项卡,Local Path就是项目地址,Deployment path就是远程地址,Local Path的文件会上传到Deployment Path,然后在远程编译
配置完成之后,记得Resync一下项目。
最后,点击Configurations,选择刚刚创建的cmake环境即可进行切换切换(因为这里只做演示,没有实际再配置一遍,就P了个图)
现在,就可以愉快地进行Linux C++的开发了。如果把Docker在Windows上生成一遍的话,应该也是没什么问题的。使用下来,可以感觉到确实比开一个虚拟机要节省资源的多。