十分钟在 macOS 快速搭建 Linux C/C++ 开发环境

news2024/11/20 10:31:23

有一个使用了 Epoll 的 C 项目,笔者平时用的 Linux 主力开发机不在身边,想在 macOS 上开发调试,但是没有 Linux 虚拟机。恰好,JetBrains CLion 的 Toolchains 配置除了使用本地环境,还支持 SSH、Docker。

笔者使用 CLion + Docker Desktop,不到十分钟就能在 macOS 上搭建一个能够开发使用 Linux 类库的 C 项目的开发环境,而且具备不错的开发体验。

文章目录

    • 准备 Docker 环境
    • 构建一个包含项目所需依赖的 Image
      • 准备 Dockerfile 并安装所需依赖
      • 构建 Image
    • CLion 配置 Toolchains
      • Toolchains 添加 Docker 环境
      • CMake 项目选择刚才添加的 Docker Toolchain
    • 开发体验
      • 头文件导航
      • 直接运行
      • 调试运行
    • 【更新】CLion Debug 控制台没有日志

准备 Docker 环境

macOS 使用 Docker Desktop 即可,本文不赘述。
当然,Docker 环境也可以不在本地,可以通过 TCP 或者 SSH 连接非本地 Docker 环境。

在这里插入图片描述

构建一个包含项目所需依赖的 Image

准备 Dockerfile 并安装所需依赖

笔者的主力开发机是 Ubuntu 22.04,选择相同的系统作为基础镜像。
镜像构建按照项目所需依赖即可。以下是搭建一个最基本的 C/C++ 环境的 Dockerfile。

FROM ubuntu:22.04
MAINTAINER wuweijie@apache.org
RUN apt update && apt install -y cmake g++ gdb

提示:如果所在环境无法加速访问 Ubuntu 官方 apt 源,建议使用国内 apt 源。

将 sources.list 覆盖基础镜像中原有的 sources.list。

FROM ubuntu:22.04
MAINTAINER wuweijie@apache.org
ARG TARGETARCH
COPY $TARGETARCH/sources.list /etc/apt/sources.list
RUN apt update && apt install -y cmake g++ gdb

构建 x86/64 架构的环境可以使用以下 sources.list

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

构建 aarch64 及其他架构的环境可以使用以下 sources.list

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse

构建 Image

>>> docker build -t teslacn/cmake:1.0 .
[+] Building 16.4s (8/8) FINISHED                                            
 => [internal] load build definition from Dockerfile                    0.0s
 => => transferring dockerfile: 37B                                     0.0s
 => [internal] load .dockerignore                                       0.0s
 => => transferring context: 2B                                         0.0s
 => [internal] load metadata for docker.io/library/ubuntu:22.04        16.3s
 => [1/3] FROM docker.io/library/ubuntu:22.04@sha256:f154feaf13b51d16e  0.0s
 => [internal] load build context                                       0.0s
 => => transferring context: 65B                                        0.0s
 => CACHED [2/3] COPY arm64/sources.list /etc/apt/sources.list          0.0s
 => CACHED [3/3] RUN apt update && apt install -y cmake g++ gdb         0.0s
 => exporting to image                                                  0.0s
 => => exporting layers                                                 0.0s
 => => writing image sha256:b4ad8d6c3284e79dedcf8c628b1a89c0bb59d29000  0.0s
 => => naming to docker.io/teslacn/cmake:1.0                            0.0s

CLion 配置 Toolchains

Toolchains 添加 Docker 环境

选择构建好的镜像即可,CLion 会自动检测构建工具、编译器、GDB 版本。
在这里插入图片描述

CMake 项目选择刚才添加的 Docker Toolchain

在这里插入图片描述

开发体验

头文件导航

CLion 自动将容器中的 Linux 头文件缓存在了本地,从代码中能够直接导航到 sys/epoll.h 文件,使用起来和直接在 Linux 环境开发没有区别。
在这里插入图片描述

直接运行

与平时本地运行相比完全没有差异。
在这里插入图片描述

调试运行

调试运行发现,除了程序的日志没有打出到 stdout 以外,其他调试功能和本地调试完全没有差异。

在这里插入图片描述

在这里插入图片描述

以上即环境搭建的过程与结果。

【更新】CLion Debug 控制台没有日志

解决方法:

setbuf(stdout, 0);

https://stackoverflow.com/questions/47776094/clion-wont-show-output-in-debug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix的介绍与部署

目录 zabbix zabbix简介 zabbix主要功能 zabbix主要特点 zabbix运行机制 zabbix架构 1.sever-client架构 2.sever-proxy-client架构 3.master-node-client架构 如何进行数据采集 zabbix工作原理 zabbix监控模式 安装zabbix5.0 部署zabbix服务端 web页面测试 部…

系统集成项目管理工程师 笔记(第二章:信息系统集成及服务管理)

文章目录2.3.1 ITIL与IT服务管理(ITSM) 117ITSM三个根本目标2.3.2 ITSS与信息技术服务 121ITSS的4个组成要素和5个生命周期2.3.3 信息系统审计 127信息系统审计是建立在以下 4 个理论基础之上的信息系统审计流程示意图审计步骤第2章 信息系统集成及服务管…

怎么设置动态壁纸?这样做就行!

案例:怎么设置动态壁纸 【朋友们,我的壁纸一直都是静态的,最近感觉有点审美疲劳了,想换些好看的动态壁纸,有朋友知道应该如何设置动态壁纸吗?】 经常使用电脑的朋友可能会觉得一直用同一张壁纸会感觉审美…

通过两阶段知识学习多种不利天气排除

论文:Learning Multiple Adverse Weather Removal via Two-stage Knowledge Learning and Multi-contrastive Regularization: Toward a Unified Model【通过两阶段知识学习多种不利天气排除】 论文下载地址:https://openaccess.thecvf.com/content/CVP…

过去的90天,ODC 发生了哪些新的改变?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 关于作者 胡智娟 OceanBase 产品经理 主要负责 OceanBase 生态工具数据研发、迁移评估方向的产品工作,在蚂蚁集团有多年数据库管理实战经验,对日常研发及运维痛点有较深感悟…

个人-计算机操作系统第五章

第五章 虚拟存储器 一、章节练习 1.系统抖动是指( )。 A. 使用机器时,千万屏幕闪烁的现象 B. 刚被调出的页面又立刻被调入所形成的频繁调入调出现象 C. 系统盘不净,千万系统不稳定的现象 D. 由于内存分配不当,偶然造成内存不够…

史上最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

一.快速排序 1.基本介绍 快速排序(Quicksort)由英国计算机科学家Tony Hoare于1959年发明,是一种经典的排序算法,被广泛应用于计算机科学领域。快速排序(Quick Sort)是一种常见的基于比较的排序算法&#…

阿里云李飞飞:数据库将迎来“四化”趋势

伴随着数字经济的高速发展,越来越多的企业管理者都开始认识到数据才是企业最宝贵的资产,并为此不断加速企业的数字化转型与升级。而在数据库领域,云原生已经当仁不让地成为了当下最炙手可热的技术趋势之一。那么在云原生的时代大潮之下&#…

C++ STL之string容器

目录一、C与C字符串的差别二、string类对象的容量操作三、string类中的常见API总览1.构造2.赋值重载赋值操作符 成员函数 assign3.存取重载下标获取操作符 [ ]成员函数 at4.拼接重载复合操作符 成员函数 append5.查找成员函数 find成员函数 rfind成员函数 replace6.比较成员函数…

python接口自动化测试 之mock模块基本使用介绍

目录 mock作用 解决依赖问题,达到解耦作用 模拟复杂业务的接口 单元测试 前后端联调 mock类解读 mock实际使用 一个未开发完成的功能如何测试? 一个完成开发的功能如何测试? mock装饰器 mock作用 解决依赖问题,达到解耦…

AutoCAD2021安装教程图解+系统要求

AutoCAD2021具有完善的图形绘制功能,是一款非常实用的CAD图形制作软件,这款软件在业内也拥有极高的知名度,基本上绘图专业相关人员都会使用这款软件,来进行设计绘图。在软件中,为用户打造了超多实用的工具,…

python学习路线图(2023详细版)建议收藏

Python是一种面向对象的程序设计语言,由Python3演变而来,Python的目标是简单、可扩展并且高效。Python可以作为 Web应用程序、桌面应用程序和桌面 Web应用程序开发的理想语言,并且有很多优点它可以使用一些简单的参数和函数、Python支持多种数…

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

IP协议格式和字段含义4位版本:IPv4或者Ipv6(他们两个不兼容);4位首部长度:报头首部长度*4;8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0); 4位 TOS分别表示: 最小延时, 最大…

【SpringCloud】1、服务网关Gateway

这里写目录标题1.网关的介绍2.GateWay2.1 GateWay介绍1.网关的介绍 大家都知道在微服务架构中, 一个系统会被拆分为很多个微服务, 那么作为客户端要如何去调用这么多的微服务呢? 如果没有网关的存在, 我们只能在客户端记录每个微服务的地址, 然后分别去调用 这样的架构, 会…

2023-04-14 使用纯JS实现一个2048小游戏

文章目录一.实现思路1.2048的逻辑2.移动操作的过程中会有三种情况二.代码部分:分为初始化部分和移动部分1.初始化部分1.1.生成第一个方块:1.2.生成第二个方块:2.移动过程部分:三.实现代码1.HTML部分2.CSS部分3.JS部分3.1.game对象的属性3.2.game对象的start方法3.3.game对象的r…

材料科学基础学习指导-吕宇鹏-名词和术语解释-第5章:相图

目录 第一部分 第二部分​​​​​​​ 第三部分 第四部分​ 第一部分 1.1组元:是材料科学中的基本术语。意思是组成合金的独立的、最基本的单元。 1.2相: 指合金中具有同一聚集状态、同一晶体结构和性质并以界面相互隔开的均匀组成部分。​​​​…

【DS】河南省第十三届ICPC大学生程序设计竞赛 J-甜甜圈

明天就要省赛了,感觉已经寄了捏 J-甜甜圈_河南省第十三届ICPC大学生程序设计竞赛(重现赛) (nowcoder.com) 题意: 思路: 直接模拟复杂度太高,因此考虑用DS优化 我们考虑用树状数组维护 在用线段树和树状…

python 填充Word文档模板 循环填充表格、图片 docxtpl、 jinja2

python 填充Word文档 循环填充表格、图片codeword模板input.txt 内容参考code from docxtpl import DocxTemplate, InlineImage from docx.shared import Inches, Cm, Mm import jinja2word_template tpl.docx out_word_file new_test.docx input_file "input.txt&quo…

【机器学习】决策树(实战)

决策树(实战) 目录一、准备工作(设置 jupyter notebook 中的字体大小样式等)二、树模型的可视化展示1、通过鸢尾花数据集构建一个决策树模型2、对决策树进行可视化展示的具体步骤3、概率估计三、决策边界展示四、决策树的正则化&a…

【Microsoft Edge】关于 Microsoft Edge 浏览器多版本安装目录结构的测试分析

文章目录1. 问题描述准备工作二、测试2.1. 运行手动保存的安装程序无法安装2.2、依次从低版本到高版本安装2.2.1 运行腾讯电脑管家下载的正式版 112.0.1722.392.2.2 用 MicrosoftEdgeSetup 安装包安装正式版 112.0.1722.482.2.3 用 MicrosoftEdgeSetupBeta 安装包安装 Beta 版 …