首页/新闻资讯/正文详情

Eglantine 构建系统深潜:CMake 选项、CPM 依赖管理与交叉编译实战指南

发布时间:2026/11/4 7:00:29 来源:云帆数科 栏目:资讯中心
Eglantine 构建系统深潜:CMake 选项、CPM 依赖管理与交叉编译实战指南
【免费下载链接】EglantineVERY experimental Nintendo Switch 2 emulator项目地址https://gitcode.com/gh_mirrors/eg/Eglantine点击查看免费下载本文是一份面向新手与开发者的 Eglantine 构建系统完整指南详解 CMake 构建选项、CPM 依赖管理cpmfile.json机制与交叉编译流程帮助你从零源码构建 Switch 2 模拟器 Eglantine并快速定位 configure 阶段的各种问题。Eglantine 是基于 yuzu 分支的 Switch 2 模拟器构建体系以CMake 3.31为骨架、Ninja为推荐生成器、C20为标准CMakeLists.txt。整个工程横跨 Windows、macOS、Linux、BSD 甚至 HaikuOS因此它的 CMake 配置里藏着大量平台分支逻辑而依赖管理则全部交给一个叫 CPMUtil 的自研封装层。下面带你一层层拆开它。全局架构构建流程一图看懂配置阶段cmake -S . -B build大致经历 4 步平台探测DetectPlatform/DetectArchitecture模块识别系统与 CPU 架构CMakeModules/失败会直接报错终止默认值与选项解析DefaultConfig、LTO、ccache、快速链接器等一系列工具开关依赖解析通过 CPMUtil 的AddJsonPackage()逐个解析 cpmfile.json先找系统库、找不到则自动下载打包源码组织最终add_subdirectory(src)挂入核心代码CMakeLists.txt产物统一输出到build/bin/如eden-cli、eden-room见 src/CMakeLists.txt 提示如果你只是普通用户建议直接使用官方 Release 包以下内容更适合开发者和打包者官方构建文档位于 docs/Build.md。快速上手两条命令完成源码构建在已装好依赖C 编译器、CMake、Git、Python3详见 docs/Deps.md的前提下git clone https://gitcode.com/gh_mirrors/eg/Eglantine cd Eglantine cmake -S . -B build -DCMAKE_BUILD_TYPERelease -G Ninja cmake --build build构建完成后可执行文件位于Windowsbuild/bin/eden.exemacOSbuild/bin/eden.app/Contents/MacOS/edenLinux 等其他系统build/bin/eden 图形化用户可以直接用Qt Creator打开根目录CMakeLists.txt选择 kit推荐RelWithDebInfo或Release点击 Configure Project 后等待 CMake 配置完成即可官方推荐流程同样写在 docs/Build.md。Windows 用户若用 MSVC请先加载 Visual C 环境仓库自带便捷脚本 tools/windows/load-msvc-env.ps1。CMake 选项清单按需定制你的构建行为所有选项均可通过-D选项名值在 configure 时传入完整清单见 docs/Options.md。下面是新手最常用的几个定义于 CMakeLists.txt选项默认值作用ENABLE_QTON启用 Qt 图形前端推荐保持开启YUZU_USE_BUNDLED_QTMSVC 上ON自动下载打包好的 Qt 二进制免手动装 QtYUZU_CMD非 AndroidON编译 SDL 无界面前端eden-cliYUZU_BUILD_PRESETcustomCPU 微架构预设generic/v3/zen2/zen4/native/ ARMarmv9等直接影响-march/-mtuneCMakeLists.txtENABLE_DEBUG_TOOLSOFF编译 Maxwell 反汇编器、SPIR-V 转换器等调试工具tools/ENABLE_WERRORON警告视为错误YUZU_STATIC_BUILDOFF尽量使用静态库不支持 LinuxENABLE_LIBUSBONlibusb 输入后端手柄支持强烈推荐开启ENABLE_RESHADEON启用 ReShade FX 后处理效果# 示例关闭 Qt、只编译命令行前端并用 Zen4 预设优化 cmake -S . -B build -G Ninja -DENABLE_QTOFF -DYUZU_CMDON -DYUZU_BUILD_PRESETzen4⚠️ 注意YUZU_LEGACY、NIGHTLY_BUILD、YUZU_STATIC_ROOM等选项面向 CI 或特定发行版场景普通构建无需改动默认值通常就是最佳体验。CPM 依赖管理一个 cpmfile.json 锁定全部第三方库Eglantine 没有让开发者手动装一堆依赖而是用 CPMUtilCPM 的封装层实现于 CMakeModules/CPMUtil.cmake统一管理。所有第三方库的仓库、版本、SHA512 校验和都集中在 cpmfile.json 中代码里只需用一行AddJsonPackage(fmt)之类的调用引入CMakeLists.txt。它的解析逻辑非常清晰先执行find_package查找系统已装的同名库需满足min_version找不到时按 JSON 里的repoversion自动下载到缓存目录.cache/cpm/由CPM_SOURCE_CACHE控制校验SHA512哈希不符则拒绝继续 —— 这是防供应链攻击的核心防线依次应用patches中列出的补丁、注入options里的 CMake 参数再纳入构建树以 cpmfile.json 中的 Boost 为例每条定义包含repo仓库、versiontag 或 10 位 commit、hash校验和、min_version系统库最低版本还支持patches如 openssl-cmake 的 4 个补丁、options、artifact发布产物名可用%VERSION%占位等字段。几个值得注意的设计CI 预编译包ci: true的条目如ffmpeg-ci、openssl-ci、sdl3-ci直接下载按平台/架构预构建好的静态库大幅缩短编译时间cpmfile.json依赖组合一致性AddDependentPackages()强制 Vulkan Headers 与 Utility Libraries 等关联包「全系统或全捆绑」避免版本错配docs/CPMUtil.md依赖清单可视化配置阶段 CPMUtil 会记录全部依赖的名称/版本/仓库由 CMakeModules/GenerateDepHashes.cmake 生成dep_hashes.h模板见 src/dep_hashes.h.in最终在应用「依赖」对话框中展示给用户维护工具仓库提供 tools/cpmutil.sh 脚本支持package hash计算校验和、package reset清缓存、package patch制作补丁等子命令完整机制缓存目录结构、打包者沙箱模式、供应链安全三件套等详见 docs/CPMUtil.md。交叉编译实战Gentoo 工具链文件编译 AArch64Eglantine 官方为 Gentoo 用户提供了现成的交叉工具链文件 CMakeModules/toolchains/GentooCross.cmake它只需一个CROSS_TARGET参数就会自动拼出目标-unknown-linux-gnu前缀的交叉编译器gcc 或 clang与 sysroot并配置好CMAKE_FIND_ROOT_PATH_MODE三大搜索模式防止把宿主机的库链进目标产物。典型流程完整指南见 docs/CrossCompile.md# 1. 准备交叉环境Gentoo 示例 sudo emerge -a sys-devel/crossdev sudo crossdev aarch64 # 2. 交叉编译 cmake -S . -B build/aarch64 -GNinja \ -DCMAKE_TOOLCHAIN_FILECMakeModules/toolchains/GentooCross.cmake \ -DCROSS_TARGETaarch64 -DENABLE_OPENGLOFF # 3. 构建并用 QEMU 运行验证 cmake --build build/aarch64 qemu-aarch64 build/aarch64/bin/eden几个实战要点强烈建议关闭 OpenGL-DENABLE_OPENGLOFF交叉环境下图形栈最容易出问题 交叉 sysroot 中只需安装标准系统库 Qtdev-qt/qtbase:6、dev-qt/qtcharts:6其余依赖交给 CPMUtil 自动补齐保险起见可加-DCPMUTIL_FORCE_BUNDLEDON️ 不想折腾交叉工具链官方还给了「无痛」方案直接用 QEMU 起一个 Debian ARM64 虚拟机在里面原生编译故障排查清单configure 失败怎么办按 docs/Build.md 的排障建议多数问题可以按下面顺序解决重读依赖文档确认 docs/Deps.md 中的版本要求CMake 3.31、Python3 10 等清缓存重试删除.cache/cpmCPM 依赖缓存和build/CMakeCache.txtCMake 缓存强制切换依赖来源-DCPMUTIL_FORCE_SYSTEMON全部强制用系统库适合 nixOS/Gentoo 沙箱环境-D包名_FORCE_BUNDLEDON单独强制捆绑某个库如-Dfmt_FORCE_BUNDLEDON-D包名_CUSTOM_DIR/path/to/dir指向本地已解压的依赖查看报错定位选项CMake 报错中通常会提示「可用cpmutil.sh查看该包缓存目录」对照 docs/CPMUtil.md 的 Addendum 章节按需处理另外如果你要参与开发配置阶段会自动把 hooks/pre-commit 安装为 Git 钩子在提交时检查src/与CMakeLists.txt的空白字符规范。总结Eglantine 的构建系统可以概括为三层CMake 选项-D参数控制前端、图形后端、CPU 预设等构建行为、CPMUtil 依赖管理cpmfile.json 一个文件锁定全部第三方库版本与 SHA512 校验和系统库优先、缺则自动下载、工具链文件GentooCross.cmake 让交叉编译只需指定目标架构。理解这三层你就能在任何平台自信地构建、裁剪和交叉编译这个 Switch 2 模拟器了。更多细节可继续查阅 docs/Build.md、docs/Options.md、docs/CPMUtil.md 与 docs/CrossCompile.md。赞分享【免费下载链接】EglantineVERY experimental Nintendo Switch 2 emulator项目地址https://gitcode.com/gh_mirrors/eg/Eglantine点击查看免费下载相关推荐Dogecoin 跨平台依赖构建系统depends实战指南从零编译多平台依赖与交叉编译配置Dogecoin 跨平台依赖构建系统depends实战指南从零编译多平台依赖与交叉编译配置 本文以 Dogecoin 仓库中的 depends 系统说明区块链libhv 构建指南Makefile / CMake / Bazel 三种构建体系与交叉编译实战libhv 构建指南Makefile / CMake / Bazel 三种构建体系与交叉编译实战 libhv 是一个用 C/C 编写的跨平台网络库覆盖后端网络通信Monero 依赖构建系统contrib/depends完全指南跨平台交叉编译与依赖缓存Monero 依赖构建系统contrib/depends完全指南跨平台交叉编译与依赖缓存 导读 本文围绕 Monero 仓库中 contrib/depen区块链金融科技上一篇Breeze-TTS-2-mlx量化选型指南bf16、8bit、4bit三大版本显存占用与音质对比下一篇TwitchAdSolutions广告检测原理深度剖析4个广告特征3种URL模式如何识别广告片段创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

NapCatQQ Linux 安装解压失败?一份从报错到修复的完整排查指南
NapCatQQ Linux 安装解压失败?一份从报错到修复的完整排查指南

NapCatQQ Linux 安装解压失败?一份从报错到修复的完整排查指南 【免费下载链接】NapCatQQ Modern protocol-side framework based on NTQQ 项目地址: https://gitcode.com/gh_mirrors/na/NapCatQQ 在 Ubuntu 22.04 上跑 NapCatQQ 的一键安装脚本,… · 2026/11/4 7:00:29

3 步打开 obsidian-git 源代码控制视图:从暂存、差异对比到自动同步的实战指南
3 步打开 obsidian-git 源代码控制视图:从暂存、差异对比到自动同步的实战指南

3 步打开 obsidian-git 源代码控制视图:从暂存、差异对比到自动同步的实战指南 【免费下载链接】obsidian-git Integrate Git version control with automatic commit-and-sync and other advanced features in Obsidian.md 项目地址: https://gitcode.com/gh_mir… · 2026/11/4 7:00:29

ok-ww 新手安装配置指南:鸣潮自动战斗与一键日常三步跑起来
ok-ww 新手安装配置指南:鸣潮自动战斗与一键日常三步跑起来

ok-ww 新手安装配置指南:鸣潮自动战斗与一键日常三步跑起来 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 每天登录《… · 2026/11/4 6:59:29

Visual Studio调试技巧与多语言开发实践
Visual Studio调试技巧与多语言开发实践

1. Visual Studio:程序员的多功能工具箱作为一名使用VS多年的开发者,我始终认为它是Windows平台上最强大的集成开发环境。VS不仅仅是一个代码编辑器,它更像是一个完整的开发套件,从代码编写、调试到发布部署,提供了一站… · 2026/11/4 7:42:37

数学建模分段轨迹题:受力切换、参数闭环与误差校验
数学建模分段轨迹题:受力切换、参数闭环与误差校验

简介:面向备战MathorCup等数学建模竞赛、关注军事运筹与轨迹建模的读者,这份第八届MathorCup优秀论文C3289围绕陆基导弹打击航母赛题,完整展示从问题重述、模型假设到静态分段轨道、动态三维参数方程及误差与命中率分析的求解链条。压缩包内仅… · 2026/11/4 7:42:37

测试数据工厂模式:提升自动化测试效率的工业级解决方案
测试数据工厂模式:提升自动化测试效率的工业级解决方案

1. 测试数据管理的核心挑战与价值作为一名经历过多次测试数据灾难的工程师,我深刻理解数据管理的重要性。记得有一次,我们的测试套件因为硬编码的手机号码导致连续三天构建失败——那个号码被重复使用了上千次,最终触发了系统的防刷机制。这就… · 2026/11/4 7:42:37

VSCode下载安装使用教程:PATH、中文包与扩展排错
VSCode下载安装使用教程:PATH、中文包与扩展排错

简介:这份PDF面向零基础编程学习者与刚接触开发环境搭建的初学者,围绕VSCode这款微软出品的跨平台免费源代码编辑器,讲清从获取到上手使用的完整脉络。内容涵盖软件定位与核心功能说明、官方下载渠道与版本选择、安装向导中各步骤的取舍、中文… · 2026/11/4 7:42:37

动环监控系统:智能化运维的核心技术与应用实践
动环监控系统:智能化运维的核心技术与应用实践

1. 动环监控系统概述动环监控系统(动力环境监控系统)是现代基础设施运维中不可或缺的智能化管理工具。这套系统通过物联网技术实时采集各类环境参数和设备运行状态,为数据中心、通信基站、电力设施等关键场所提供全天候的"健康监护"… · 2026/11/4 7:42:37

博客每日一句功能实现:双层缓存与响应式设计
博客每日一句功能实现:双层缓存与响应式设计

1. 项目概述在个人博客中添加"每日一句"功能是个提升用户体验的好方法。这个功能每天展示不同的中英文双语名言警句,既能增加网站的内容丰富度,又能给访客带来一些思考和启发。我最近在自己的博客上实现了这个功能,经过几周的运行测… · 2026/11/4 7:41:37

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码