2017-04-05 116 views
1

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

我做了一些研究,我认为(如果我错了,请纠正我)gyb是swift团队编写的预处理程序,以便他们不必重复编写代码,例如不必为不同的int类型编写许多不同版本的代码,这些代码只会相互变化。

但我真的不明白在其中写入gyb文件的python代码。有什么办法可以将这些gyb文件转换为swift代码吗?所以有可能研究如何迅速Int类型是否实现?

+1

此链接可能会帮助您https://www.quora.com/Is-it-possible-to-convert-a-Python-source-code-to-another-programming-language –

回答

1

你可以做的是:

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

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

这表明所有的命令,其包括那些预处理.gyb 文件的文件。特别是,你会发现像

在/ usr/bin中/ Python的/路径/到/ SWIFT代码/ SWIFT/utils的/ GYB -DunicodeGraphemeBreakPropertyFile = /路径/到/ SWIFT代码/ 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删除/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