首页 > 系统相关 >利用Docker和CLion在Mac优雅地开发和调试Linux C++程序

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

时间:2023-12-14 14:22:05浏览次数:49  
标签:rsync RUN C++ Mac Linux Docker root

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

starrymarin starrymarin 计算机主业,间断性健身爱好者,摩托、金融入门   27 人赞同了该文章

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

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

最近的工作主要使用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了

 

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

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

 

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

 

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

 

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

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

 

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

发布于 2019-09-09 12:34

标签:rsync,RUN,C++,Mac,Linux,Docker,root
From: https://www.cnblogs.com/sexintercourse/p/17901081.html

相关文章

  • linux下,需要删除windows中^M
    linux下,如果需要在vim中查看^M,需要使用如下命令:在Vim的命令模式中输入:e++ff=unix%有时候,我们在Linux中打开曾在Win中编辑过的文件时,会在行尾看到^M字符。虽然,这并不影响什么,但心里面还是有点不痛快。如果想要删除这些^M字符,可以使用Vim来轻松搞定它。在Vi......
  • Qt/C++视频监控安卓版/多通道显示视频画面/录像存储/视频播放安卓版/ffmpeg安卓
    一、前言随着监控行业的发展,越来越多的用户场景是需要在手机上查看监控,而之前主要的监控系统都是在PC端,毕竟PC端屏幕大,能够看到的画面多,解码性能也强劲。早期的手机估计性能弱鸡,而现在的手机性能不是一般的牛,甚至超越了PC机的性能,所以手机上查看多路监控也就有了硬件基础前提。对......
  • Linux 部署企业级夜莺监控分析工具并实现远程访问(运维零距离!!)
    夜莺监控是一款开源云原生观测分析工具,采用All-in-One的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于2020年3月20日,在github上发布v1版本,已累计迭代100多个版本。本地部署后,为解决......
  • C++中的图像处理与变换总结
    个人总结图像加法去噪是对同一场景的多幅图像求平均值,以降低加性随机噪声。随机噪声在不同的图像中是独立的,而场景信息是相同的。因此,通过将多幅图像相加并求平均,可以使场景信息保持不变,而噪声的影响则会减小。这是因为随机噪声的期望值为零,所以多幅图像的平均值会使噪声趋向于零......
  • C++ 快速加载 Dll 里的 API
    最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在Windows上是.exe为什么要程序加载器?个人理解是,可执行文件大小最好是越小越好,功能都可以由dll文件执行而程序加载器里最重要的是两个win32函数,分别是LoadLibrary和GetProcAddress前者是加载dll并返回i......
  • Linux 部署1Panel现代化运维管理面板教程并且实现远程访问(运维福音!!)
    1Panel是一个现代化、开源的Linux服务器运维管理面板。高效管理,通过Web端轻松管理Linux服务器,包括主机监控、文件管理、数据库管理、容器管理等下面我们介绍在Linux本地安装1Panel并结合cpolar内网穿透工具实现远程访问1Panel管理界面1.Linux安装1Panel执行如下......
  • Machine is not on the network
     在调试Androidjni的时候发现一个奇怪的问题 在连接socket的时候老是报错m_sock=socket(AF_INET,SOCK_STREAM,0);if(m_sock<0){debug(LEVEL_ERROR,"Socketcreateerror%d\r\n",errno);return-1;} 报错  Socketc......
  • go语言window|mac|linux下交叉编译其他平台的软件包
    go语言window|mac|linux下交叉编译其他平台的软件包注意:go1.17发现直接使用set是不起作用的,必须要使用goenv-w来设置一、设置编译环境,需要发布哪个平台Window下1、设置Linux编译环境SETCGO_ENABLED=0setGOARCH=amd64setGOOS=linux2、设置Mac编译环境goenv-wCGO_ENA......
  • C++基础 -6- 二维数组,数组指针
    ———————二维数组,数组指针——————— ......
  • C++ Qt开发:Slider滑块条组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Slider滑块条组件的常用方法及灵活运用。当涉及到C++Qt开发中的Slider滑块条组件时,你可能会用到......