VM 编译运行 Hical Benchmark 流程:不走 Docker 的本地压测方案

VM 直接编译运行 Hical Benchmark 流程 不走 Docker,直接在 VM 上编译项目源码 + bench_server,用 wrk 压测。 适用于需要验证本地代码改动的场景(如性能优化后的 A/B 对比)。 前置条件 VM 里已有 Hical 项目源码:~/projects/Hical/ 已安装编译依赖(GCC 14+、CMake 3.20+、Boost 1.82+、OpenSSL) 挂接点 /mnt/hical_host/ 对应宿主机 d:/hical/Hical/ 一、同步宿主机代码改动到 VM 如果在宿主机上修改了源码,需要先拷贝到 VM 项目目录: 1 2 3 4 5 # 示例:拷贝 3 个改动文件 cp /mnt/hical_host/src/core/HttpServer.h \ /mnt/hical_host/src/core/HttpServer.cpp \ /mnt/hical_host/src/core/HttpSessionImpl.cpp \ ~/projects/Hical/src/core/ 或者整体同步 src 目录: 1 rsync -av /mnt/hical_host/src/ ~/projects/Hical/src/ 二、编译 1 2 3 4 5 6 7 8 9 10 cd ~/projects/Hical # 清理旧构建(可选,首次或 CMake 配置变更时执行) rm -rf build # 配置:Release + 编译 bench_server cmake -B build -DCMAKE_BUILD_TYPE=Release -DHICAL_BUILD_BENCH=ON # 编译(-j 自动取 CPU 核数) cmake --build build -j$(nproc) 编译产物:build/bench_server(直接链接本地 hical_core 库,代码改动即生效)。 ...

May 8, 2026 · 6 min · 1193 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