2024-07-01 02:35:17 +00:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<html lang="zh" dir="ltr">
|
|
|
|
|
|
<head>
|
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
2026-07-04 07:43:21 +00:00
|
|
|
|
<title>项目结构 | StaticPHP</title>
|
|
|
|
|
|
<meta name="description" content="A powerful tool designed for building portable executables including PHP, extensions, and more.">
|
2026-07-16 06:25:16 +00:00
|
|
|
|
<meta name="generator" content="VitePress v2.0.0-alpha.18">
|
|
|
|
|
|
<link rel="preload stylesheet" href="/assets/style.C4OPn_QV.css" as="style">
|
2025-06-12 04:49:10 +00:00
|
|
|
|
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
2024-07-01 02:35:17 +00:00
|
|
|
|
|
2026-07-16 06:25:16 +00:00
|
|
|
|
<script type="module" src="/assets/app.Bw02Lh2k.js"></script>
|
|
|
|
|
|
<link rel="preload" href="/assets/inter-roman-latin.Cy4MYw_J.woff2" as="font" type="font/woff2" crossorigin="">
|
|
|
|
|
|
<link rel="modulepreload" href="/assets/chunks/theme.C_odZu9O.js">
|
|
|
|
|
|
<link rel="modulepreload" href="/assets/chunks/framework.DrNIf5Lg.js">
|
|
|
|
|
|
<link rel="modulepreload" href="/assets/zh_develop_structure.md.BivWsi6C.lean.js">
|
|
|
|
|
|
<script id="check-dark-mode">(()=>{let e=localStorage.getItem(`vitepress-theme-appearance`)||`auto`,t=window.matchMedia(`(prefers-color-scheme: dark)`).matches;(!e||e===`auto`?t:e===`dark`)&&document.documentElement.classList.add(`dark`)})();</script>
|
|
|
|
|
|
<script id="check-mac-os">document.documentElement.classList.toggle(`mac`,/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
2024-07-01 02:35:17 +00:00
|
|
|
|
</head>
|
|
|
|
|
|
<body>
|
2026-07-16 06:25:16 +00:00
|
|
|
|
<div id="app"><div class="Layout" data-v-0cf61682><!--[--><!--]--><!--[--><span tabindex="-1" data-v-414181b2></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-414181b2>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0cf61682 data-v-9f75dce3><div class="VPNavBar has-sidebar top" data-v-9f75dce3 data-v-9ca1369d><div class="wrapper" data-v-9ca1369d><div class="container" data-v-9ca1369d><div class="title" data-v-9ca1369d><div class="VPNavBarTitle has-sidebar" data-v-9ca1369d data-v-1e38c6bc><a class="title" href="/zh/" data-v-1e38c6bc><!--[--><!--]--><!--[--><img class="VPImage logo" src="/images/static-php_nobg.png" alt data-v-8426fc1a><!--]--><span data-v-1e38c6bc>StaticPHP</span><!--[--><!--]--></a></div></div><div class="content" data-v-9ca1369d><div class="content-body" data-v-9ca1369d><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9ca1369d data-v-2fc7f2c6><!--[--><button type="button" class="VPNavBarSearchButton" aria-label="Search" aria-keyshortcuts="/ control+k meta+k" data-v-2fc7f2c6 data-v-baa3be99><span class="vpi-search" aria-hidden="true" data-v-baa3be99></span><span class="text" data-v-baa3be99>Search</span><span class="keys" aria-hidden="true" data-v-baa3be99><kbd class="key-cmd" data-v-baa3be99>⌘</kbd><kbd class="key-ctrl" data-v-baa3be99>Ctrl</kbd><kbd data-v-baa3be99>K</kbd></span></button><button type="button" class="VPNavBarAskAiButton" aria-label="Ask AI" aria-keyshortcuts="control+i meta+i" data-v-2fc7f2c6 data-v-4eb17e89><span class="vpi-sparkles" aria-hidden="true" data-v-4eb17e89></span></button><!----><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9ca1369d data-v-7b3e138d><span id="main-nav-aria-label" class="visually-hidden" data-v-7b3e138d> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/guide/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>构建指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/develop/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>开发者</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/contributing/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>贡献</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/faq/" tabindex="0" data-v-7b3e138d data-v-6500c4c4><!--[--><span data-v-6500c4c4>FAQ</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7b3e138d data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-42cb505d><span class="text" data-v-42cb505d><!----><span data-v-42cb505d>v3 (alpha)</span><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><div class="items" data-v-25a6cce8><!--[--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-fff73daa><a class="VPLink link" href="/zh/" data-v-fff73daa><!--[--><span data-v-fff73daa>v3 (alpha)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-fff73daa><a class="VPLink link" href="https://static-php.github.io/v2-docs/" data-v-fff73daa><!--[--><span data-v-fff73daa>v2</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-9ca1369d data-v-c70a0580 data-v-42cb505d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-42cb505d><span class="text" data-v-42cb505d><span class="vpi-languages option-icon" data-v-42cb505d></span><!----><span class="vpi-chevron-down text-icon" data-v-42cb505d></span></span></button><div class="menu" data-v-42cb505d><div class="VPMenu" data-v-42cb505d data-v-25a6cce8><!----><!--[--><!--[--><div class="items" data-v-c70a0580><p class="title" data-v-c70a0580>简体中文</p><!--[--><div class="V
|
2026-07-04 07:43:21 +00:00
|
|
|
|
<span class="line"><span>├── bin/ # 可执行入口脚本(spc、spc.ps1、setup-runtime 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>├── config/</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── env.ini # 默认环境变量配置</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── env.custom.ini # 用户自定义环境变量(覆盖 env.ini)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── artifact/ # 构建产物配置(下载工具链、预构建二进制等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ └── pkg/ # 包配置文件(YAML)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── ext/ # PHP 扩展包配置(ext-*.yml、builtin-extensions.yml)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── lib/ # 库包配置(*.yml)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ └── target/ # 构建目标配置(php.yml、curl.yml 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>├── src/</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── bootstrap.php # 应用引导(注册自动加载、DI 容器等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── globals/ # 全局辅助函数</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Package/ # 各包的构建逻辑实现(PHP 类)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Artifact/ # 构建产物的自定义下载/解压逻辑</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Command/ # 包级别自定义命令</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Extension/ # PHP 扩展构建类(ext-*.php)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Library/ # 库构建类(*.php)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ └── Target/ # 构建目标类(php.php、curl.php 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ └── StaticPHP/ # 框架核心代码</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── ConsoleApplication.php # Symfony Console 应用入口</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Artifact/ # 构建产物下载与解压(Downloader、Extractor 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Attribute/ # PHP 注解定义</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Artifact/ # 产物相关注解(CustomSource、BinaryExtract 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Doctor/ # Doctor 相关注解(CheckItem、FixItem 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ └── Package/ # 包构建相关注解(BuildFor、BeforeStage、AfterStage、</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ # CustomPhpConfigureArg、PatchBeforeBuild 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Command/ # CLI 命令实现(build-libs、build-target、doctor 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Config/ # 配置加载与验证(PackageConfig、ArtifactConfig 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── DI/ # 依赖注入容器(ApplicationContext、CallbackInvoker)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Doctor/ # 系统环境检查与修复(Doctor、CheckResult)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Exception/ # 自定义异常类</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Package/ # 包核心模型与构建调度</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Package.php # 包基类</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── LibraryPackage.php # 库包类型</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── PhpExtensionPackage.php # PHP 扩展包类型</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── TargetPackage.php # 构建目标包类型</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── PackageInstaller.php # 包安装器(下载、解压源码)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ └── PackageBuilder.php # 包构建器(执行构建流程)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Registry/ # 注册表管理(Registry、PackageLoader、ArtifactLoader)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Runtime/ # 运行时工具</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Executor/ # 命令执行器(UnixAutoconfExecutor、UnixCMakeExecutor、</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ │ # WindowsCMakeExecutor、Executor 基类)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ ├── Shell/ # Shell 抽象(UnixShell、WindowsCmd 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ │ └── SystemTarget.php # 系统目标信息</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── Toolchain/ # 工具链抽象(GccNative、Musl、MSVC、Zig、ClangBrew 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ └── Util/ # 通用工具类</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── System/ # 系统平台工具(LinuxUtil、MacOSUtil、WindowsUtil 等)</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── BuildRootTracker.php # buildroot 文件追踪</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── DependencyResolver.php # 依赖解析与构建顺序</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── FileSystem.php # 文件系统操作</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── GlobalEnvManager.php # 全局环境变量管理</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── InteractiveTerm.php # 交互式终端输出</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── LicenseDumper.php # 开源协议导出</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── PkgConfigUtil.php # pkg-config 工具封装</span></span>
|
|
|
|
|
|
<span class="line"><span>│ ├── SourcePatcher.php # 源码补丁工具</span></span>
|
|
|
|
|
|
<span class="line"><span>│ └── SPCConfigUtil.php # SPC 配置读取工具</span></span>
|
|
|
|
|
|
<span class="line"><span>├── tests/ # 单元测试与集成测试</span></span>
|
|
|
|
|
|
<span class="line"><span>├── downloads/ # 下载缓存目录(源码包、预构建二进制)</span></span>
|
|
|
|
|
|
<span class="line"><span>├── source/ # 解压后的源码目录</span></span>
|
|
|
|
|
|
<span class="line"><span>├── buildroot/ # 构建输出目录(头文件、静态库等)</span></span>
|
|
|
|
|
|
<span class="line"><span>├── pkgroot/ # 按平台归档的构建产物</span></span>
|
2026-07-16 06:25:16 +00:00
|
|
|
|
<span class="line"><span>└── spc.registry.yml # core 注册表定义文件</span></span></code></pre></div><p>需要注意的是,<code>src/Package</code> 目录下的类主要负责实现具体包的构建逻辑,而 <code>src/StaticPHP</code> 目录下的类则提供了构建框架的核心功能,如命令调度、环境检查、工具链抽象等,两者是解耦的。<code>src/Package</code> 对应的是 <code>core</code> 注册表中的包,其中包含 PHP 及相关扩展、库、构建目标等的具体实现,而 <code>src/StaticPHP</code> 则是整个构建系统的基础设施,支持不同注册表和包的构建需求。</p></div></div></main><footer class="VPDocFooter" data-v-7011f0d8 data-v-e29034c6><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e29034c6><span class="visually-hidden" id="doc-footer-aria-label" data-v-e29034c6>Pager</span><div class="pager" data-v-e29034c6><a class="VPLink link pager-link prev" href="/zh/develop/" data-v-e29034c6><!--[--><span class="desc" data-v-e29034c6>Previous page</span><span class="title" data-v-e29034c6>开发简介</span><!--]--></a></div><div class="pager" data-v-e29034c6><a class="VPLink link pager-link next" href="/zh/develop/registry.html" data-v-e29034c6><!--[--><span class="desc" data-v-e29034c6>Next page</span><span class="title" data-v-e29034c6>Registry</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0cf61682 data-v-c3855bb3><div class="container" data-v-c3855bb3><p class="message" data-v-c3855bb3>Released under the MIT License.</p><p class="copyright" data-v-c3855bb3>Copyright © 2023-present crazywhalecc</p></div></footer><!--[--><!--]--></div></div>
|
|
|
|
|
|
<script>window.__VP_HASH_MAP__=JSON.parse("{\"deps-craft-yml.md\":\"BlUAUDy4\",\"en_contributing_index.md\":\"DJrK0rwl\",\"en_develop_artifact-model.md\":\"CSsy1IGq\",\"en_develop_build-lifecycle.md\":\"DAZqcB7z\",\"en_develop_craft-yml.md\":\"KSoZofRA\",\"en_develop_doctor-module.md\":\"ByvES-_A\",\"en_develop_extending_annotations.md\":\"UKL7B7B3\",\"en_develop_extending_custom-artifact.md\":\"DotD8ITd\",\"en_develop_extending_dependency-injection.md\":\"CyyHOkvH\",\"en_develop_extending_index.md\":\"B2xj8d9p\",\"en_develop_extending_lifecycle-hooks.md\":\"6uwWcfAD\",\"en_develop_extending_package-classes.md\":\"y3Xf7UZ4\",\"en_develop_index.md\":\"BITZJqcR\",\"en_develop_package-model.md\":\"CMZBu01x\",\"en_develop_php-src-changes.md\":\"Cc0fC8cE\",\"en_develop_registry.md\":\"BsjJNDQv\",\"en_develop_structure.md\":\"D8gP8oQJ\",\"en_develop_system-build-tools.md\":\"CUw5wQ4E\",\"en_faq_index.md\":\"BvIAh2aW\",\"en_guide_cli-generator.md\":\"C6SB8xhE\",\"en_guide_cli-reference.md\":\"D7EY77fp\",\"en_guide_deps-map.md\":\"DKgvqXtD\",\"en_guide_env-vars.md\":\"BgjYKJG9\",\"en_guide_extension-notes.md\":\"B3shjkUU\",\"en_guide_extensions.md\":\"ATwZq3HB\",\"en_guide_first-build.md\":\"INdBGOsG\",\"en_guide_index.md\":\"z0D1Gcrs\",\"en_guide_installation.md\":\"BV9Ks-lX\",\"en_guide_migrate-from-v2.md\":\"CUFkYufx\",\"en_guide_sapi-reference.md\":\"p2zEyiLe\",\"en_guide_troubleshooting.md\":\"DVi8H9ZX\",\"en_index.md\":\"D-9tNbNs\",\"index.md\":\"TfAAAF_x\",\"zh_contributing_index.md\":\"8SUl40-w\",\"zh_develop_artifact-model.md\":\"CrLRSeeY\",\"zh_develop_build-lifecycle.md\":\"DLh_YUAK\",\"zh_develop_craft-yml.md\":\"uyL3P4FG\",\"zh_develop_doctor-module.md\":\"B-KVjOyS\",\"zh_develop_extending_annotations.md\":\"Dcz6J_X-\",\"zh_develop_extending_custom-artifact.md\":\"BoYCxDEr\",\"zh_develop_extending_dependency-injection.md\":\"BKeBJfDY\",\"zh_develop_extending_index.md\":\"B7wWMbKy\",\"zh_develop_extending_lifecycle-hooks.md\":\"CG51Rugr\",\"zh_develop_extending_package-classes.md\":\"DBU2hT9_\",\"zh_develop_index.md\":\"CrUwzvi2\",\"zh_develop_package-model.md\":\"DDw9ZCCd\",\"zh_develop_php-src-changes.md\":\"artDuYna\",\"zh_develop_registry.md\":\"ChqnXzVM\",\"zh_develop_structure.md\":\"BivWsi6C\",\"zh_develop_system-build-tools.md\":\"BLdfbezU\",\"zh_faq_index.md\":\"ypwV8ySx\",\"zh_guide_cli-generator.md\":\"BuKsNlwB\",\"zh_guide_cli-reference.md\":\"LVzdkmu2\",\"zh_guide_deps-map.md\":\"9-QWHshB\",\"zh_guide_env-vars.md\":\"D2oUaqNR\",\"zh_guide_extension-notes.md\":\"D9lGXhKW\",\"zh_guide_extensions.md\":\"CNtRfejb\",\"zh_guide_first-build.md\":\"DSwF9CHy\",\"zh_guide_index.md\":\"DR1hBcxc\",\"zh_guide_installation.md\":\"CWZRSBwL\",\"zh_guide_migrate-from-v2.md\":\"Dp7VZbGT\",\"zh_guide_sapi-reference.md\":\"TjYI_FdR\",\"zh_guide_troubleshooting.md\":\"CJ6N_2fk\",\"zh_index.md\":\"BXvgifjq\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"StaticPHP\",\"description\":\"A powerful tool designed for building portable executables including PHP, extensions, and more.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/images/static-php_nobg.png\",\"nav\":[],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/crazywhalecc/static-php-cli\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2023-present crazywhalecc\"},\"externalLinkIcon\":true,\"search\":{\"provider\":\"algolia\",\"options\":{\"appId\":\"IHJHUB1SF1\",\"apiKey\":\"8266d31cc2ffbd0e059f1c6e5bdaf8fc\",\"indexName\":\"static-php docs\",\"askAi\":{\"assistantId\":\"b72369b2-60a5-461d-902c-5c18d8c05902\",\"agentStudio\":true,\"sidePanel\":true}}}},\"locales\":{\"en\":{\"label\":\"English\",\"lang\":\"en\",\"themeConfig\":{\"nav\":[{\"text\":\"Guide\",\"link\":\"/en/guide/\"},{\"text\":\"Develop\",\"link\":\"/en/develop/\"},{\"text\":\"Contributing\",\"link\":\"/en/contributing/\"},{\"text\":\"FAQ\",\"link\":\"/en/faq/\"},{\"text\":\"v3 (alpha)\",\"items\":[{\"text\":\"v3 (alpha)\",\"link\":\"/en/\
|
2024-07-01 02:35:17 +00:00
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
</html>
|