Files
static-php-cli/zh/develop/structure.html

87 lines
38 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="zh" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>项目结构 | StaticPHP</title>
<meta name="description" content="A powerful tool designed for building portable executables including PHP, extensions, and more.">
<meta name="generator" content="VitePress v2.0.0-alpha.12">
<link rel="preload stylesheet" href="/assets/style.DtFsVR9B.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.Bml_Pmyb.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CoS8sfxC.js">
<link rel="modulepreload" href="/assets/chunks/framework.C2AwuPrQ.js">
<link rel="modulepreload" href="/assets/zh_develop_structure.md.EpUhxfrR.lean.js">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a: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>
</head>
<body>
<div id="app"><div class="Layout" data-v-1df9f90f><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-1df9f90f data-v-9f75dce3><div class="VPNavBar" data-v-9f75dce3 data-v-2a96a3d0><div class="wrapper" data-v-2a96a3d0><div class="container" data-v-2a96a3d0><div class="title" data-v-2a96a3d0><div class="VPNavBarTitle has-sidebar" data-v-2a96a3d0 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-2a96a3d0><div class="content-body" data-v-2a96a3d0><!--[--><!--]--><div class="VPNavBarSearch search" data-v-2a96a3d0><!--[--><!----><div id="docsearch"><button type="button" aria-label="Search" aria-keyshortcuts="/ control+k meta+k" class="DocSearch DocSearch-Button"><span class="DocSearch-Button-Container"><span class="vpi-search DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key"></kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-2a96a3d0 data-v-39714824><span id="main-nav-aria-label" class="visually-hidden" data-v-39714824> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/guide/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>构建指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/develop/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>开发者</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/contributing/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>贡献</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/zh/faq/" tabindex="0" data-v-39714824 data-v-e56f3d57><!--[--><span data-v-e56f3d57>FAQ</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-39714824 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-cd834e02><a class="VPLink link" href="/zh/" data-v-cd834e02><!--[--><span data-v-cd834e02>v3 (alpha)</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-25a6cce8 data-v-cd834e02><a class="VPLink link vp-external-link-icon" href="https://static-php.github.io/v2-docs/" target="_blank" rel="noreferrer" data-v-cd834e02><!--[--><span data-v-cd834e02>v2</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-2a96a3d0 data-v-88af2de4 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-88af2de4><p class="title" data-v-88af2de4>简体中文</p><!--[--><div class="VPMenuLink" data-v-88af2de4 data-v-cd834e02><a class="VPLink link" href="/en/develop/structure.html" data-v-cd834e02><!--[--><span data-v-cd834e02>English</span><!--]--></a></div><!--]--></div><!--]--><!--]--></d
<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>
<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-e257564d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><a class="VPLink link pager-link prev" href="/zh/develop/" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Previous page</span><span class="title" data-v-e257564d>开发简介</span><!--]--></a></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/zh/develop/registry.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>Registry</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-1df9f90f 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\":\"DaRp5sDR\",\"en_contributing_index.md\":\"Bw6aGZo7\",\"en_develop_artifact-model.md\":\"Be9wN_ZU\",\"en_develop_build-lifecycle.md\":\"BrkkrOI9\",\"en_develop_craft-yml.md\":\"CJqlRAWM\",\"en_develop_doctor-module.md\":\"BPx_gh7b\",\"en_develop_extending_annotations.md\":\"rWEgD5t7\",\"en_develop_extending_custom-artifact.md\":\"BQoftnUi\",\"en_develop_extending_dependency-injection.md\":\"3RvnsJs8\",\"en_develop_extending_index.md\":\"CBALgGvM\",\"en_develop_extending_lifecycle-hooks.md\":\"TH51ajMN\",\"en_develop_extending_package-classes.md\":\"DL47sxq4\",\"en_develop_index.md\":\"CDPdLdXm\",\"en_develop_package-model.md\":\"D5wiXvya\",\"en_develop_php-src-changes.md\":\"CIUUevPf\",\"en_develop_registry.md\":\"B5tf5XnG\",\"en_develop_structure.md\":\"B3aY4J4P\",\"en_develop_system-build-tools.md\":\"aR6vgJMi\",\"en_faq_index.md\":\"ButqLRAC\",\"en_guide_cli-generator.md\":\"BIALMDzk\",\"en_guide_cli-reference.md\":\"B6zUxFdM\",\"en_guide_deps-map.md\":\"B9M0h5GJ\",\"en_guide_env-vars.md\":\"B5JOZL1S\",\"en_guide_extension-notes.md\":\"C1QFg1E9\",\"en_guide_extensions.md\":\"SakKJurE\",\"en_guide_first-build.md\":\"C3LOd79t\",\"en_guide_index.md\":\"hf3edrTD\",\"en_guide_installation.md\":\"DNcSrgIL\",\"en_guide_migrate-from-v2.md\":\"CfVymFnT\",\"en_guide_sapi-reference.md\":\"Dx3FnmW6\",\"en_guide_troubleshooting.md\":\"Mc4ZUzP-\",\"en_index.md\":\"Bb9qw2-E\",\"index.md\":\"DnU1YpfU\",\"zh_contributing_index.md\":\"BxNPLW0M\",\"zh_develop_artifact-model.md\":\"BtcNBk1j\",\"zh_develop_build-lifecycle.md\":\"D1JbjvDB\",\"zh_develop_craft-yml.md\":\"oQn7yY_F\",\"zh_develop_doctor-module.md\":\"DAzJoWwn\",\"zh_develop_extending_annotations.md\":\"DAa7FG7j\",\"zh_develop_extending_custom-artifact.md\":\"BTEWH7KO\",\"zh_develop_extending_dependency-injection.md\":\"PLkrv44m\",\"zh_develop_extending_index.md\":\"B478Mpx4\",\"zh_develop_extending_lifecycle-hooks.md\":\"BNdlHrBu\",\"zh_develop_extending_package-classes.md\":\"CLofM-pE\",\"zh_develop_index.md\":\"CYr92Q4h\",\"zh_develop_package-model.md\":\"DYRZ8aaf\",\"zh_develop_php-src-changes.md\":\"QIFUEZHE\",\"zh_develop_registry.md\":\"BvRBmoGT\",\"zh_develop_structure.md\":\"EpUhxfrR\",\"zh_develop_system-build-tools.md\":\"DEEE1raf\",\"zh_faq_index.md\":\"DkTldA8b\",\"zh_guide_cli-generator.md\":\"D-dK4dGb\",\"zh_guide_cli-reference.md\":\"DMttieGz\",\"zh_guide_deps-map.md\":\"BsudOLor\",\"zh_guide_env-vars.md\":\"Bs72W99k\",\"zh_guide_extension-notes.md\":\"D-KMlaiu\",\"zh_guide_extensions.md\":\"gAHaZJuZ\",\"zh_guide_first-build.md\":\"CQdFhKsg\",\"zh_guide_index.md\":\"DaRL6Seg\",\"zh_guide_installation.md\":\"Ap2snxXu\",\"zh_guide_migrate-from-v2.md\":\"Df8wnmfP\",\"zh_guide_sapi-reference.md\":\"DXv5eV6I\",\"zh_guide_troubleshooting.md\":\"CueHHZkW\",\"zh_index.md\":\"BFbwQGEI\"}");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/\
</body>
</html>