Hical Linux 开发环境搭建

Hical Linux 开发环境(实操记录) 概述 将 Hical C++20 Web 框架的日常开发环境从 Windows 本地迁移到 Linux 虚拟机,通过 Oracle VM VirtualBox 运行 Ubuntu 24.04.3 LTS Server 虚拟机,使用 Tabby Terminal + VS Code Remote SSH 进行开发。 为什么迁移 痛点 Linux 解决 MSYS2/vcpkg 路径混乱、ABI 不兼容 原生 apt 包管理,toolchain 统一 liburing/io_uring 仅 Linux 可用 原生支持,解锁异步文件 I/O 最优路径 CI 环境是 Ubuntu,本地是 Windows 开发即 CI,减少"本地能跑 CI 挂"的问题 clang-format/clang-tidy 版本对齐困难 直接装 LLVM APT 源的 clang-20 Sanitizer(ASan/UBSan)Windows 支持差 Linux 原生完美支持 宿主机配置 项目 值 处理器 Intel Core i7-11700K @ 3.60GHz(8核16线程) 内存 32 GB 操作系统 Windows 10 Enterprise LTSC 2021 VM 存放磁盘 D:\ (900 GB,SSD) 一、VirtualBox 虚拟机创建 1.1 下载 软件 版本 下载地址 VirtualBox 7.1+ https://www.virtualbox.org/wiki/Downloads Ubuntu ISO ubuntu-24.04.3-live-server-amd64.iso(3.1 GiB) https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ 选择 Server 版(无桌面 GUI),减少资源占用。国内推荐清华镜像下载更快。 ...

May 8, 2026 · 17 min · 3460 words

Docker 新手入门:从零开始容器化你的应用

Docker 新手入门:从零开始容器化你的应用 如果你的程序在你电脑上能跑,那就把你的电脑也一起发给客户吧。——Docker 之前的世界 写在前面 这篇文章适合谁? 听说过 Docker 但从未用过的开发者 被「在我电脑上明明能跑」折磨过的人 想了解容器化部署但不知道从哪开始的人 读完你将获得什么? 理解 Docker 核心概念(镜像、容器、仓库) 能独立编写 Dockerfile 并构建镜像 能用 Docker Compose 编排多容器应用 能将一个 Web 应用容器化部署 一、Docker 是什么? 1.1 一句话解释 Docker 是一个应用打包、分发、运行的平台。它把你的应用和所有依赖(库、配置、系统工具)打包成一个镜像,然后在任何安装了 Docker 的机器上以容器的形式运行。 1.2 虚拟机 vs 容器 对比项 虚拟机 (VM) Docker 容器 隔离级别 硬件级(Hypervisor) 进程级(内核共享) 启动速度 分钟级 秒级 体积 GB 级 MB 级 性能损耗 10-20% 接近原生 资源占用 高(每个 VM 一个完整 OS) 低(共享宿主内核) 1 2 3 4 5 6 7 8 9 10 11 12 13 ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ │ 虚拟机架构 │ │ Docker 架构 │ ├─────────────────────────────────┤ ├─────────────────────────────────┤ │ App A │ App B │ App C │ │ App A │ App B │ App C │ │ Libs │ Libs │ Libs │ │ Libs │ Libs │ Libs │ │ OS │ OS │ OS │ ├─────────────────────────────────┤ ├─────────────────────────────────┤ │ Docker Engine │ │ Hypervisor │ ├─────────────────────────────────┤ ├─────────────────────────────────┤ │ Host OS │ │ Host OS │ ├─────────────────────────────────┤ ├─────────────────────────────────┤ │ Hardware │ │ Hardware │ └─────────────────────────────────┘ └─────────────────────────────────┘ 1.3 核心三概念 镜像(Image):只读模板,包含运行应用所需的一切。类比:安装光盘 容器(Container):镜像的运行实例。类比:用光盘装好的一台电脑 仓库(Registry):存放镜像的地方。类比:应用商店(Docker Hub) 三者关系: ...

October 1, 2025 · 10 min · 2113 words

CMake 原理深度解析:从脚本到可执行文件的完整旅程

CMake 原理深度解析:从脚本到可执行文件的完整旅程 CMake 不难,难的是不知道它在干什么。这篇文章的目标就是把黑盒变白盒。 写在前面 大多数人学 CMake 的路径是:搜到一份 CMakeLists.txt,改改能用就行,出了问题就再搜。结果用了好几年,遇到稍微复杂一点的场景(比如交叉编译、多配置、发布库)就卡住了。 根本原因是没有建立原理模型——不知道 CMake 执行 cmake -B build 时到底发生了什么,project()、target_link_libraries() 这些命令在内部做了什么。 这篇文章就是要填这个坑。 前置要求:用过 CMake 写过几行命令,知道"能编译就行"是什么感觉。 一、CMake 是什么?(真正的答案) 1.1 一句话定义 CMake 是一个元构建系统(Meta Build System),它不直接编译代码,而是生成其他构建系统的配置文件。 这句话很关键,很多人把 CMake 当编译器用,但它跟编译器没有任何直接关系。 1.2 构建工具链全景 一个 C++ 项目从源码到可执行文件,经历了这些工具: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 你写的代码 │ ▼ CMakeLists.txt(你告诉 CMake 项目结构是什么) │ ▼ cmake -B build(配置 + 生成) │ ├── Linux/macOS → Makefile 或 build.ninja ├── Windows → Visual Studio .sln + .vcxproj 或 build.ninja └── macOS → Xcode .xcodeproj │ ▼ cmake --build build(或直接 make / ninja / msbuild) │ ├── 编译器(gcc / clang / MSVC cl.exe) │ → .cpp → .o(目标文件) │ └── 链接器(ld / lld / link.exe) → .o + .a/.lib → 最终的可执行文件或库 类比:CMake 就像建筑师画的图纸(蓝图)。施工队(make/ninja)按图纸干活,工人(编译器)才是真正拿锤子的人。图纸本身不盖楼。 ...

June 2, 2025 · 17 min · 3506 words

现代 CMake 课程学习:从「面向目录」到「面向目标」

现代 CMake 课程学习:从「面向目录」到「面向目标」 现代 CMake 不是新语法,是新思维。 写在前面 这篇文章适合谁? 用过 CMake 但只会 add_executable + target_link_libraries 的人 从 Makefile / Visual Studio 工程迁移过来,想系统学 CMake 的人 看别人 CMakeLists.txt 里一堆 PUBLIC、$<BUILD_INTERFACE:...> 一头雾水的人 什么是 CMake?(30 秒版本) CMake 不是编译器,它是一个构建系统生成器。你写一份 CMakeLists.txt,CMake 帮你生成对应平台的构建文件: Linux → Makefile 或 Ninja Windows → Visual Studio .sln 或 Ninja macOS → Xcode 或 Ninja 类比:CMake 就像一个"翻译官",你用一种语言描述"我要编译什么",它翻译成各平台编译器能理解的指令。 为什么要学"现代" CMake? CMake 从 2000 年诞生至今,经历了巨大变化。2014 年的 CMake 3.0 是分水岭——引入了 target-based(面向目标)设计。此后的版本持续完善这套体系。 如果你还在用 include_directories()、link_libraries() 这套"传统写法",那你用的是 2014 年之前的思路——就像 2025 年还在写 C++98 一样。 ...

June 1, 2025 · 15 min · 3155 words