<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>构建系统 on PlumePHP</title><link>https://plumephp.com/tags/%E6%9E%84%E5%BB%BA%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 构建系统 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sun, 27 Sep 2026 13:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E6%9E%84%E5%BB%BA%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ 跨平台构建矩阵：CMake Presets、包管理器与 CI 矩阵、ABI 兼容</title><link>https://plumephp.com/cpp-cross-platform-build-matrix/</link><pubDate>Sun, 27 Sep 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-cross-platform-build-matrix/</guid><description>&lt;h2 id="一跨平台构建的痛点"&gt;一、跨平台构建的痛点&lt;/h2&gt;
&lt;h3 id="1-三个维度的差异"&gt;1. 三个维度的差异&lt;/h3&gt;
&lt;p&gt;C++ 项目的跨平台之难，根源在于三个维度同时变化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;编译器&lt;/strong&gt;：MSVC、GCC、Clang，三者对标准特性的支持进度与 &lt;code&gt;-f&lt;/code&gt;/&lt;code&gt;/&lt;/code&gt; 开头的参数风格完全不同；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;平台 API&lt;/strong&gt;：网络（&lt;code&gt;WSASocket&lt;/code&gt; vs &lt;code&gt;socket&lt;/code&gt;）、线程、文件路径、动态库加载方式各异；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ABI&lt;/strong&gt;：类型布局（&lt;code&gt;long&lt;/code&gt; 在 LP64 vs LLP64 的长度不同）、符号修饰（name mangling）、&lt;code&gt;extern &amp;quot;C&amp;quot;&lt;/code&gt; 规则。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-需要矩阵的原因"&gt;2. 需要矩阵的原因&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;我在 macOS 上编译通过&amp;quot;远不足以代表项目健康。一次真实的发布要在&lt;strong&gt;平台 × 编译器 × 构建类型 × 依赖版本&lt;/strong&gt;的组合上通过。人工维护这样一组组合必然遗漏，因此要引入**声明式构建配置（CMake Presets）+ 自动化依赖（Conan/vcpkg）+ CI 矩阵（GitHub Actions）**三位一体的方案。&lt;/p&gt;</description></item></channel></rss>