KLayout macOS 源码构建完全指南:build4mac.py 从模块组合、编译部署到 QA 测试与 DMG 打包
硬件开发桌面应用图形学【免费下载链接】klayoutKLayout Main Sources项目地址https://gitcode.com/gh_mirrors/kl/klayout点击查看免费下载本文以 KLayout 仓库中macbuild目录的官方构建说明 macbuild/ReadMe.md 为主体完整覆盖 KLayout 0.30.9 在 macOS 上的源码构建全流程如何选择 Qt5/Qt6 与 Ruby/Python 模块组合、如何调用build4mac.py完成编译与部署、如何用macQAT.py运行ut_runner单元 QA 测试、以及如何用makeDMG4mac.py制作可分发的 DMG 安装包。读完本文你能够在一台 Intel x86_64 或 Apple Silicon 的 Mac 上独立复现 KLayout 的 macOS 原生构建并理解输出包目录命名ST-/LW-/HW-/EX-背后的源码级逻辑。1. 适用系统与构建目标macbuild目录包含构建 KLayout适用版本 0.30.9 及以上所需的全部 macOS 构建文件。根据 macbuild/ReadMe.md 的说明当前支持的 macOS 版本为macOS 版本状态Golden Gate (27.x)实验性在 M4 Mac Mini 上验证Tahoe (26.x)实验性在 M4 Mac Mini 上验证Sequoia (15.x)主开发环境Sonoma (14.x)实验性对更早的操作系统Ventura 13.7.8、Monterey 12.7.6、Big Sur 11.7.10、Catalina 10.15.7、Mojave 10.14、High Sierra 10.13、Sierra 10.12、El Capitan 10.11的构建支持已经停止也不再提供预构建的 DMG 包。原文档说明这些旧系统中 Ventura 与 Monterey 上构建理论上仍可能成功但已不属于官方维护范围。这一点可以从源码得到印证macbuild/build4mac.py 中的Get_Default_Config()通过platform.uname()解析 OS 主版本号并映射为平台名27→GoldenGate、25→Tahoe、24→Sequoia、23→Sonoma、22→Ventura、21→Monterey而对非Darwin系统或未列出的发行版会直接打印错误并sys.exit(1)。需要特别注意的架构限制从源码结构看macbuild/build4mac.py 要求机器为x86_64若检测到arm64Apple Silicon且平台在支持列表中则会设置环境变量QMAKE_APPLE_DEVICE_ARCHSarm64以构建原生 ARM64 版本。原文档指出其主线目标机器是Intel x86_64 macOS SequoiaApple Silicon 环境的详细构建流程虽然与 Intel Mac 基本相同但文档未单独展开。2. Qt 框架的选择KLayout 的 macOS 构建依赖 Qt 图形框架。原文档给出的三种来源默认MacPorts 的 Qt5通常位于/opt/local/libexec/qt5/Homebrew 的 Qt6通常位于/usr/local/opt/qt6/Apple Silicon 上为/opt/homebrew/opt/qt6/Anaconda3 的 Qt6安装配置稍复杂见第 7 节 6F 用例。macbuild/build4mac_env.py 是这些模块路径的集中定义文件。它为每个 Qt 来源定义了qmake、macdeployqt与libdir三个关键路径例如Qt5MacPorts { qmake : /opt/local/libexec/qt5/bin/qmake, deploy: /opt/local/libexec/qt5/bin/macdeployqt, libdir: /opt/local/libexec/qt5/lib } Qt6Brew { qmake : %s/opt/qt6/bin/qmake % DefaultHomebrewRoot, deploy: %s/opt/qt6/bin/macdeployqt % DefaultHomebrewRoot, libdir: %s/opt/qt6/lib % DefaultHomebrewRoot }其中 Homebrew 根目录按架构自动区分x86_64机器取/usr/localarm64机器取/opt/homebrew见 macbuild/build4mac_env.py。对于 Anaconda3Qt5/Qt6 分别安装在虚拟环境klayout-qt5/klayout-qt6下x86_64 位于/Applications/anaconda3/envs/arm64 位于/opt/anaconda3/envs/Qt6 环境使用qmake6与macdeployqt6可执行文件。原文档还给出两点重要提示Qt6 迁移仍在进行中可用但可能遇到构建或运行时错误构建 KLayout 0.29.0 且使用 Homebrew 环境时必须使用 Qt6 6.7.0以解决上游报告的一个 Qt5 编译问题原文档引用了上游 issue #1599。3. 脚本语言支持Ruby 与 Python 的模块组合KLayout 支持 Ruby 与 Python 两种对象脚本语言构建时通过build4mac.py的组合参数决定绑定哪种语言、以及语言解释器来自哪个软件包管理器。macbuild/build4mac_env.py 按以下维度组织字典Rubynil不绑定/Sys各 macOS 版本系统自带的 Ruby 2.6解释器位于/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby头文件与libruby.tbd取自 Xcode SDK 或 Command Line Tools SDK/MP34MacPorts Ruby 3.4/opt/local/bin/ruby3.4/HB34Homebrew Ruby 3.4{Homebrew 根}/opt/ruby3.4/Ana3Anaconda3 环境内的 Ruby 3.4Pythonnil/Sys系统 Command Line Tools 自带的 Python 3.9框架位于/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework//MP314、MP313MacPorts Python 3.14/3.13位于/opt/local/Library/Frameworks/Python.framework//HB314、HB313、HB311Homebrew 对应版本/HBAuto自动探测 Homebrew 中最新的 Python 3.x/Ana3Anaconda3 环境内 Python。其中HBAuto的实现值得注意macbuild/build4mac_env.py 用正则扫描{Homebrew 根}/opt/python*/Frameworks/Python.framework按版本号排序取最大者若系统完全没有 Homebrew Python会打印 WARNING 并禁用该选项。每个模块字典统一包含exe解释器、inc头文件目录、lib动态库三项供后续 qmake/make 阶段生成正确的编译链接参数。4. 构建前置条件按照原文档第 4 节构建前需要准备与目标 macOS 匹配的最新 Xcode 与 Command Line ToolsMacPorts 的 Qt5或 Homebrew / Anaconda3 的 Qt6来自 MacPorts、Homebrew 或 Anaconda3 的libgit2可选MacPorts、Homebrew 或 Anaconda3 的 Ruby 与 Python 包。对于 Ruby/Python 的具体版本匹配要求原文档要求参考 macbuild/build4mac_env.py 中各字典项注释里列出的安装命令如sudo port install ruby34、brew install python3.14、conda install -y --override-channels -c conda-forge ruby3.4.7等。5. build4mac.py 命令行选项详解macbuild/build4mac.py 是 macOS 构建的顶层 Python 脚本操作系统类型会被自动检测-q选项的默认值按平台生成GoldenGate/Tahoe/Sequoia/Sonoma 上默认组合为qt5macportssyssys。完整选项表如下继承自原文档第 5 节 Usage of build4mac.py for building KLayout 0.30.9 or later on different Apple macOS platforms. $ [python] ./build4mac.py option argument : descriptions (refer to macbuild/build4mac_env.py for details) | default value ------------------------------------------------------------------------------------------------------- [-q|--qt type] : case-insensitive type[Qt5MacPorts, Qt5Brew, Qt5Ana3, | qt5macports : Qt6MacPorts, Qt6Brew, Qt6Ana3] | : Qt5MacPorts: use Qt5 from MacPorts | : Qt5Brew: use Qt5 from Homebrew | : Qt5Ana3: use Qt5 from Anaconda3 | : Qt6MacPorts: use Qt6 from MacPorts (*) | : Qt6Brew: use Qt6 from Homebrew (*) | : Qt6Ana3: use Qt6 from Anaconda3 (*) | : (*) migration to Qt6 is ongoing | [-r|--ruby type] : case-insensitive type[nil, Sys, MP34, HB34, Ana3] | sys : nil: dont bind Ruby | : Sys: use [GoldenGate|Tahoe|Sequoia|Sonoma]-bundled Ruby 2.6 | : MP34: use Ruby 3.4 from MacPorts | : HB34: use Ruby 3.4 from Homebrew | : Ana3: use Ruby 3.4 from Anaconda3 | [-p|--python type] : case-insensitive type[nil, Sys, MP314, HB314, Ana3, | sys : MP313, HB313, | : HB311, HBAuto] | : nil: dont bind Python | : Sys: use [GoldenGate|Tahoe|Sequoia|Sonoma]-bundled Python 3.9 | : MP314: use Python 3.14 from MacPorts | : HB314: use Python 3.14 from Homebrew | : Ana3: use Python 3.14 from Anaconda3 | : MP313: use Python 3.13 from MacPorts | : HB313: use Python 3.13 from Homebrew | : HB311: use Python 3.11 from Homebrew () | : () required to provide the legacy pip in HW-*.dmg | : HBAuto: use the latest Python 3.x auto-detected from Homebrew | [-P|--buildPymod] : build and deploy Pymod (*.whl) for LW-*.dmg | disabled [-n|--noqtbinding] : dont create Qt bindings for ruby scripts | disabled [-u|--noqtuitools] : dont include uitools in Qt binding | disabled [-s|--no32bitcoord] : dont use short (32bit) coordinates; use long (64bit) instead | disabled [-g|--nolibgit2] : dont include libgit2 for Git package support | disabled [-m|--make option] : option passed to make | --jobs4 [-d|--debug] : enable debug mode build; AddressSanitizer (ASAN) is linked | disabled [-c|--checkcom] : check command-line and exit without building | disabled [-y|--deploy] : deploy executables and dylibs, including Qts Frameworks | disabled [-Y|--DEPLOY] : deploy executables and dylibs for those who built KLayout | disabled : from the source code and use the tools in the same machine | : ! After confirmation of the successful build of klayout.app, | : rerun this script with BOTH: | : 1) the same options used for building AND | : 2) -y|--deploy OR -Y|--DEPLOY | : optionally with [-v|--verbose 0-3] | [-v|--verbose 0-3] : verbose level of macdeployqt (effective with -y only) | 1 : 0 no output, 1 error/warning (default), | : 2 normal, 3 debug | [-?|--?] : print this usage and exit; in zsh, quote like -? or --? | disabled结合源码可以补充几点文档未展开的实现细节选项解析-q/-r/-p的值经大写化后在候选字典中查找大小写不敏感非法取值会打印错误并终止见 macbuild/build4mac.py。-y与-Y互斥两者同时传入会报错退出-yfull deploy会内嵌 Qt及视组合内嵌 PythonFramework-Ypartial deploy只部署可执行文件与 dylib不内嵌 Qt[5|6]/Ruby/Python因此适用于在本机源码构建、本机直接使用的场景。版本号来源KLayout 版本从项目根目录的version.sh读取见 macbuild/build4mac.py 的GetKLayoutVersionFrom(./version.sh)最终参与包目录命名。-m选项默认--jobs4直接透传给make-d开启 debug 模式并链接 AddressSanitizer。输出包目录命名规则源码级解释构建/部署完成后产物位于一个形如ST-qt5MP.pkg.macos-Sequoia-C32-release-RsysPsys的目录。目录名由 macbuild/build4mac.py 按模板%s%s.pkg.macos-%s-%s-%s-%s % (PackagePrefix, qt, Platform, coordSize, mode, ruby_python)生成各段含义目录名片段含义ST-标准包standard内嵌 Qt使用系统自带 Ruby 2.6 与 Python 3.9LW-轻量包lightweight不内嵌 Qt[5|6]、Ruby、Python可加--buildPymod附带*.whlHW-重量包heavyweight内嵌 Qt 与 Homebrew Python 3.11 的 FrameworksEX-特殊组合exceptional不落入上述三类的模块组合qt5MP/qt5Brew/qt5Ana3/qt6MP/qt6Brew/qt6Ana3所用 Qt 来源Sequoia等macOS 平台名C32/C64坐标表示为 32 位整数默认/ 64 位整数-s选项release/debug构建模式-d选项RsysPsys等Ruby 与 Python 模块标识如Rmp34Pmp314、Rhb34Phb314、RsysPhb311、Rana3Pana3从源码结构看前缀的判定逻辑集中在 macbuild/build4mac.py-Y一律LW--y时若 Ruby 与 Python 均为系统自带则为ST-EmbedQtTrue若 Python 为 Homebrew 3.11或 HBAuto 恰好解析到 3.11则为HW-EmbedQtTrue、EmbedPython3True其余为EX-且HW-包要求 Qt 来自 MacPorts 或 HomebrewAnaconda3 的 Qt 不允许内嵌不满足时直接退出。6. 实战用例6A6H以下各用例中的实际文件名取自 macOS Sequoia 环境在不同 macOS 上平台名等片段会相应变化。所有构建用例的共同流程为*安装依赖 → 调用build4mac.py构建约一小时→ 用相同构建参数加-y/-Y重新运行以部署klayout.app内的可执行文件与 dylibbuddy 命令行工具 strm一并部署到klayout.app/Contents/Buddy/→ 将klayout.app拷贝到/Applications**。6A. 标准构建系统自带 Ruby/Python MacPorts Qt5安装 MacPorts 后安装 Qt5 与 libgit2$ sudo port install coreutils $ sudo port install findutils $ sudo port install qt5 $ sudo port install libgit2确认系统自带 Python 存在/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/*原文档说明撰写时该 Python 版本为3.9.6与源码字典PythonSequoia指向的Python3.framework/Versions/3.9一致。调用构建脚本这些选项在 Tahoe/Sequoia/Sonoma 上即默认值$ cd /where/build.sh/exists $ ./build4mac.py -q qt5macports -r sys -p sys确认构建成功约一小时取决于机器配置。用相同选项加-y重新运行将可执行文件与库部署到klayout.app内$ ./build4mac.py -q qt5macports -r sys -p sys -y产物位于ST-qt5MP.pkg.macos-Sequoia-C32-release-RsysPsys目录ST-标准包qt5MPMacPorts Qt5C3232 位坐标RsysPsys系统 Ruby 2.6 系统 Python 3.9。 4. 将生成的klayout.app拷贝/移动到/Applications完成安装。6B. 全 MacPorts 构建MacPorts Ruby 3.4 MacPorts Python 3.14安装依赖$ sudo port install coreutils $ sudo port install findutils $ sudo port install qt5 $ sudo port install ruby34 $ sudo port install python314 $ sudo port install py314-pip $ sudo port install libgit2构建$ cd /where/build.sh/exists $ ./build4mac.py -q qt5macports -r mp34 -p mp314确认构建成功。相同选项加-Y重新运行以部署$ ./build4mac.py -q qt5macports -r mp34 -p mp314 -Y若在步骤 1 与步骤 3 都使用--buildPymod选项KLayout 独立 Python 包*.whl将被构建并部署到klayout.app/Contents/pymod-dist/。产物位于LW-qt5MP.pkg.macos-Sequoia-C32-release-Rmp34Pmp314目录LW-轻量包Rmp34Pmp314MacPorts Ruby 3.4 MacPorts Python 3.14。 4. 将klayout.app安装到/Applications。6C. 全 Homebrew 构建Homebrew Ruby 3.4 Homebrew Python 3.14注意构建 KLayout 0.29.0 需要 Qt6 6.7.0以解决上游 Qt5 编译问题issue #1599。安装依赖并运行 Homebrew Python 目录结构整理工具 macbuild/python3HB.py该工具在{Homebrew 根}/opt/pythonver/lib/下建立Python.framework - ../Frameworks/Python.framework/的标准化符号链接结构支持-v 3.11/3.12/3.13/3.14$ brew install qt6 $ brew install ruby3.4 $ brew install python3.14 $ brew install libgit2 $ cd /where/build.sh/exists $ cd macbuild $ ./python3HB.py -v 3.14构建$ cd /where/build.sh/exists $ ./build4mac.py -q qt6brew -r hb34 -p hb314确认构建成功。相同选项加-Y部署$ ./build4mac.py -q qt6brew -r hb34 -p hb314 -Y产物位于LW-qt6Brew.pkg.macos-Sequoia-C32-release-Rhb34Phb314目录。 4. 将klayout.app安装到/Applications。警告Homebrew Python 3.12 不再提供传统pip命令直接使用会报error: externally-managed-environment。按照 Homebrew 的建议应使用虚拟环境详见Resources/script-bundle-B.zip内的HomebrewUser-ReadMeFirst.txt。6D. 部分 Homebrew 构建系统 Ruby Homebrew Python 3.11注意构建 KLayout 0.29.0 需要 Qt6 6.7.0同 6C 的原因。安装依赖$ brew install qt6 $ brew install python3.11 $ brew install libgit2 $ cd /where/build.sh/exists $ cd macbuild $ ./python3HB.py -v 3.11构建$ cd /where/build.sh/exists $ ./build4mac.py -q qt6brew -r sys -p hb311确认构建成功。相同选项加-y重新运行将可执行文件与库含 Qt 与 Python 两套 Frameworks部署到klayout.app内strm* 工具同样部署到klayout.app/Contents/Buddy/$ ./build4mac.py -q qt6brew -r sys -p hb311 -y产物位于HW-qt6Brew.pkg.macos-Sequoia-C32-release-RsysPhb311目录HW-重量包因同时内嵌 Qt6 与 Python FrameworksRsysPhb311系统 Ruby Homebrew Python 3.11。 4. 将klayout.app安装到/Applications。重要目前尚不支持部署 Homebrew Ruby。因此若计划使用-y选项进行完整部署构建时必须使用-r sys。6E. 异构组合MacPorts Qt5 系统 Ruby Homebrew Python 3.11注意这是构建常用 HW*.dmg 包的另一种实用方案。分别安装两套依赖# MacPorts 侧 $ sudo port install coreutils $ sudo port install findutils $ sudo port install qt5 $ sudo port install libgit2 # Homebrew 侧 $ brew install python3.11 $ cd /where/build.sh/exists $ cd macbuild $ ./python3HB.py -v 3.11构建$ cd /where/build.sh/exists $ ./build4mac.py -q qt5macports -r sys -p hb311确认构建成功。相同选项加-y部署$ ./build4mac.py -q qt5macports -r sys -p hb311 -y产物位于HW-qt5MP.pkg.macos-Sequoia-C32-release-RsysPhb311目录HW-重量包内嵌 Qt5 与 Python Frameworks。 4. 将klayout.app安装到/Applications。6F. 全 Anaconda3 构建Anaconda3 Ruby 3.4 Anaconda3 Python 3.13若 Anaconda3 安装在$HOME/opt/anaconda3/或其他位置需先建立符号链接/Applications/anaconda3/ - $HOME/opt/anaconda3/然后按下述步骤安装以 Intel x86_64 的Anaconda3-2025.06-0-MacOSX-x86_64.pkg为例装到/Applications后创建新虚拟环境1) Create a new env klayout-qt6 (with stable solver channels) switch solver to libmamba for faster/more stable resolves $ conda install -n base -y conda-libmamba-solver $ conda config --set solver libmamba Create the environment (on this x86_64 machine it will pull osx-64 builds) $ conda create -n klayout-qt6 python3.13 -y $ conda activate klayout-qt6 In this env only, prefer conda-forge strictly (to avoid mixing) $ conda config --env --add channels conda-forge $ conda config --env --add channels defaults $ conda config --env --set channel_priority strict 2) Install Qt6 (qt6-main and qt6-multimedia) only from conda-forge Qt6 core (builds that typically include Designer/UiTools) $ conda install -y --override-channels -c conda-forge qt6-main6.9.3 $ conda install -y --override-channels -c conda-forge qt6-multimedia6.9.3 3) Additionally, install Ruby and libgit2 only from conda-forge $ conda install -y --override-channels -c conda-forge ruby3.4.7 $ conda install -y --override-channels -c conda-forge libgit21.9.1上述 conda-forge 版本约束与 macbuild/build4mac_env.py 注释中给出的推荐完全一致qt6-main6.9.3、qt6-multimedia6.9.3、ruby3.4.7、libgit21.9.1且脚本期望的解释器路径即环境内的bin/python3.13与include/python3.13见 macbuild/build4mac_env.py 的PythonAnaconda3V6。构建$ cd /where/build.sh/exists $ ./build4mac.py -q qt6ana3 -r ana3 -p ana3确认构建成功。相同选项加-Y部署若步骤 1 与 3 均使用--buildPymod*.whl将部署到klayout.app/Contents/pymod-dist/$ ./build4mac.py -q qt6ana3 -r ana3 -p ana3 -Y产物位于LW-qt6Ana3.pkg.macos-Sequoia-C32-release-Rana3Pana3目录Rana3Pana3Anaconda3 Ruby 3.4 Anaconda3 Python 3.13。 4. 将klayout.app安装到/Applications。 5. 由于解释器位于 conda 虚拟环境中还需要创建一个 Automator 包装应用Launcher来启动 KLayout详见Resources/script-bundle-A.zip内的Anaconda3User-ReadMeFirst.txt。6G. 其他组合除 6A6F 之外逻辑上还可以选择其他模块组合包括nil。选择这类非常规组合时产物目录将以EX-exceptional为前缀——这与 macbuild/build4mac.py 中的PackagePrefix EX-分支吻合。6H. 通过代理服务器使用 git 版 Salt Package Manager如果通过代理服务器使用基于 git 的 Salt Package Manager需要设置KLAYOUT_GIT_HTTP_PROXY环境变量$ export KLAYOUT_GIT_HTTP_PROXYhttp://111.222.333.444:5678代理服务器的实际 IP 与端口请向系统管理员索取。原文档强烈建议将此设置放入启动用的 service script bundle 中示例脚本*.app.Bash可在 macbuild/Resources/script-bundle-A.zip、macbuild/Resources/script-bundle-B.zip、macbuild/Resources/script-bundle-H.zip、macbuild/Resources/script-bundle-P.zip、macbuild/Resources/script-bundle-S.zip 中找到。7. QA 测试用 macQAT.py 驱动 ut_runner构建完成后可选地进行 QA 测试。macOS 环境下的 QA 工作目录为[ST|LW|HB]-build_directory.macQAT目录中随附macQAT.py它是ut_runner可执行文件的包装脚本。操作步骤继承自原文档第 7 节进入 QA 工作目录cd [ST|LW|HB]-build_directory.macQAT打印ut_runner用法./macQAT.py -u仅启动 KLayout 主 GUI 窗口./macQAT.py -k正常运行ut_runner./macQAT.py -r如有需要可用-x test选项跳过个别出错测试可多次使用支持逗号分隔的测试名列表。从 macbuild/macQAT.py 源码可以看出该包装脚本的完整能力与工作原理环境变量注入ExportEnvVariablesmacbuild/macQAT.pyTESTSRC..测试源目录、TESTTMPQATest_Git短SHA1_时间戳_目录名测试临时目录在 Darwin 上另设置DYLD_LIBRARY_PATH指向.、db_plugins、lay_plugins、pymod、MallocNanoZone0以及一组ASAN_OPTIONS关闭 leak detection、symbolize 等这解释了QA 所需的环境变量由macQAT.py设置这一说明-u实际执行./ut_runner --help-all-k实际执行./klayout.app/Contents/MacOS/klayout-r默认继续运行对应ut_runner的-c-s/--stop可切换为遇错即停运行日志写入QATest_*.log支持--dryrun仅打印命令行单元测试套件本身位于 src/unit_tests 与各模块的unit_tests子目录如 src/db/unit_testsut_runner由 src/klayout.pro 构建体系生成。8. 制作 DMG 安装包使用另一个 Python 脚本 macbuild/makeDMG4mac.py 可以制作 DMG 安装包。前提该目录是 6A6F 中以-y/-Y选项运行build4mac.py生成的产物目录。若尚不存在从父目录即build.sh所在目录为脚本建立符号链接makeDMG4mac.py - macbuild/makeDMG4mac.py带-p指定包目录与-m制作压缩 DMG选项调用$ cd /where/build.sh/exists $ ./makeDMG4mac.py -p LW-qt5MP.pkg.macos-Sequoia-C32-release-Rmp34Pmp314 -m该命令生成两个文件LW-klayout-0.30.9-macOS-Sequoia-C32-1-qt5MP-Rmp34Pmp314.dmg—— 主 DMG 文件LW-klayout-0.30.9-macOS-Sequoia-C32-1-qt5MP-Rmp34Pmp314.dmg.md5—— MD5 值文本文件。DMG 文件名中的1是 DMG 序列号可通过-s|--serial修改默认 1。从 macbuild/makeDMG4mac.py 的 usage 可知脚本还支持-c/--clean清理工作目录与-m互斥、-b|--bundle强制指定 DMG 内的 bundle 名、-u/--unsafe跳过部分检查慎用、-t|--targetdmg指定输出文件名其实现基于create-dmg的衍生工作DMG 背景图与卷图标取自 macbuild/Resources 中的 PNG 与.icns资源AppleScript 模板为 macbuild/Resources/template-KLayoutDMG.applescript。9. 已知问题与维护要点原文档Known issues一节指出由于构建脚本假定了一些特定版本的非 OS 标准 Ruby/Python更新 Homebrew、MacPorts 或 Anaconda3 后可能引发构建与链接错误此时需要相应更新 macbuild/build4mac_env.py 中的字典内容如 Ruby 3.4 的 include 目录从ruby-3.4.0变为新版本号、libruby.3.4.dylib路径变化、Homebrew Python 框架路径等。换言之build4mac_env.py是版本锚点文件第三方软件包管理器升级后应优先核对该文件各字典项与实际安装路径是否一致。此外结合源码还可以得到两条实用结论选择nil/非系统语言组合时NonOSStdLang标志会被置位-y完整部署的可用性取决于组合类型如 HW- 包强制要求 Homebrew python3.11见 macbuild/build4mac.py需要部署的 KLayout 可执行文件清单klayout及 11 个 buddy 工具strm2cif、strm2dxf、strm2gds、strm2gdstxt、strm2lstr、strm2mag、strm2oas、strm2txt、strmclip、strmcmp、strmrun、strmxor定义在 macbuild/build4mac_env.py 的KLayoutExecs与原文档中buddy 命令行工具strm*部署到klayout.app/Contents/Buddy/的说明对应。10. 小结KLayout 的 macOS 构建体系围绕三个脚本协作build4mac.py构建与部署模块组合由build4mac_env.py的字典驱动、macQAT.pyut_runnerQA 包装器、makeDMG4mac.pyDMG 打包辅以python3HB.py整理 Homebrew Python 的框架目录结构。默认路径是 MacPorts Qt5 系统 Ruby 2.6 系统 Python 3.9 的ST-标准包追求轻量分发可选LW-组合需要自带解释器分发的 HW*.dmg 则选择 Homebrew python3.11 方案。对于 Qt6 或 Python 3.13/3.14 等新组合务必以 macbuild/build4mac_env.py 中字典项注释标注的 conda-forge/MacPorts/Homebrew 具体版本号为准以规避软件包管理器升级带来的构建链接问题。赞分享硬件开发桌面应用图形学【免费下载链接】klayoutKLayout Main Sources项目地址https://gitcode.com/gh_mirrors/kl/klayout点击查看免费下载相关推荐3 步装好 eSearch跨平台屏幕截屏与离线 OCR 工具快速上手指南3 步装好 eSearch跨平台屏幕截屏与离线 OCR 工具快速上手指南 eSearch 是一款覆盖 Windows、Linux 与 macOS 的跨平台屏幕桌面应用OCR屏幕录制视频处理图像处理NuvioDesktop从源码构建到发布Gradle打包MSI、DMG、DEB与Flatpak完整部署指南NuvioDesktop从源码构建到发布Gradle打包MSI、DMG、DEB与Flatpak完整部署指南 NuvioDesktop 是一个免费开源的跨平台媒RStudio macOS 源码构建全指南依赖安装、Universal 双架构编译与 DMG 打包实战RStudio macOS 源码构建全指南依赖安装、Universal 双架构编译与 DMG 打包实战 本文是一份面向开发者的 RStudiomacOS 平开发工具后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考