ios - 如何将gyb文件转换成swift代码

标签 ios swift

我正在阅读 github 上的 swift 源代码,我注意到有扩展名为 gyb 的文件,例如Swift github Integers.swift.gyb .

我做了一些研究,我认为(如果我错了请纠正我)gyb 是 swift 团队编写的预处理器,这样他们就不必编写重复的代码,例如不必为不同的 int 类型编写许多不同版本的代码,它们之间的差异很小。

但是我真的不明白写gyb文件的python代码。有什么办法可以把那些gyb文件转换成swift代码吗?所以有可能研究多快,例如int类型实现了吗?

最佳答案

你可以做的是:

然后使用“详细选项”编译源代码:

cd swift-source/swift
utils/build-script --verbose

这显示了所有执行的命令,包括那些预处理 .gyb 的命令 文件。特别是你会发现类似的东西

/usr/bin/python /path/to/swift-source/swift/utils/gyb -DunicodeGraphemeBreakPropertyFile=/path/to/swift-source/swift/utils/UnicodeData/GraphemeBreakProperty.txt -DunicodeGraphemeBreakTestFile=/path/to/swift-source/swift/utils/UnicodeData/GraphemeBreakTest.txt -DCMAKE_SIZEOF_VOID_P=8 -o /path/to/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp Integers.swift.gyb && /opt/local/bin/cmake -E copy_if_different /path/to/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp /path/to/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift && /opt/local/bin/cmake -E remove /path/to/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift.tmp

这表明 Python 脚本 swift-source/swift/utils/gyb 被调用到 预处理Integers.swift.gyb文件,结果复制到

/path/to/swift-source/build/Ninja-DebugAssert/swift-macosx-x86_64/stdlib/public/core/8/Integers.swift

你也可以自己调用脚本,使用上面的命令作为模板:

cd swift-source/swift/stdlib/public/core
/usr/bin/python /path/to/swift-source/swift/utils/gyb \\
  -DunicodeGraphemeBreakPropertyFile=/path/to/swift-source/swift/utils/UnicodeData/GraphemeBreakProperty.txt \\
  -DunicodeGraphemeBreakTestFile=/path/to/swift-source/swift/utils/UnicodeData/GraphemeBreakTest.txt \\
  -DCMAKE_SIZEOF_VOID_P=8 \\
  -o Integers.swift.tmp Integers.swift.gyb

关于ios - 如何将gyb文件转换成swift代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224203/

相关文章:

ios - HTML 输入 jQuery UI 日期选择器与 iOS 原生日期输入

ios - 如何快速检测打开(未关闭)UIBezierPath 内的水龙头

ios - 开发tvos app需要ios app吗

swift - 协议(protocol)类型的调用方法

ios - 如何将 AppTrackingTransparency 权限添加到您的 iOS 应用程序

ios - 苹果搜索 API : Getting minimum OS supported for an App from iTunes

ios - Xcode swift在多个 Storyboard中管理多个 View Controller

ios - IOS Safari 上的实习生 3.4.1 "unable to set accept insecure certs on Safari"

ios - 如何在用户平移和移动 map 时将 MKAnnotation View Image 固定在 map 的中心(Swift)?

swift - if let 可以在 Swift 3.1 中以逗号分隔吗?