日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift之源码编译的环境搭建和编译流程

發布時間:2024/5/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift之源码编译的环境搭建和编译流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編譯環境
  • 版本準備:macOS 10.15.3 Xcode 11.5
  • brew install cmake njnia
  • Python 2.X
  • Swift 源碼地址:Apple/Swift
編譯流程
① clone 源碼
  • clone 命令:
git clone --branch swift-5.2.4-RELEASE https://github.com/apple/swift.git
  • 這里我編譯的是 swift-5.2.4-RELEASE,因為在編譯源碼的時候,這是我使用的版本。
  • 如果需要編譯更新的源碼,可自行在官網上尋找對應的版本:Apple/Swift。同時要注意對應的Xcode的版本要匹配(在官方文檔編譯的時候會有具體的說明)。
  • clone 完成如下:
Cloning into 'swift'...remote: Enumerating objects: 1, done.remote: Counting objects: 100% (1/1), done.remote: Total 1170695 (delta 0), reused 0 (delta 0), pack-reused 1170694Receiving objects: 100% (1170695/1170695), 614.74 MiB | 9.37 MiB/s, done.Resolving deltas: 100% (953771/953771), done.Note: switching to '0bab712aea8f0eb74f3acc303d96857f697a98d8'.
② update-checkout
  • 確保當前的目錄在 swift-source 下,然后執行以下命令:
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone
  • 結果如下:
Skipping cmake on DarwinSkipping icu on DarwinSkipping clone of 'sourcekit-lsp', directory already existsSkipping clone of 'swift-syntax', directory already existsSkipping clone of 'cmake', requested by userSkipping clone of 'swift-xcode-playground-support', directory already existsSkipping clone of 'swift-format', directory already existsSkipping clone of 'indexstore-db', directory already existsSkipping clone of 'swift-stress-tester', directory already existsSkipping clone of 'llvm-project', directory already existsSkipping clone of 'llbuild', directory already existsSkipping clone of 'cmark', directory already existsSkipping clone of 'swift-corelibs-foundation', directory already existsSkipping clone of 'swift-tools-support-core', directory already existsSkipping clone of 'swift-corelibs-xctest', directory already existsSkipping clone of 'ninja', directory already existsSkipping clone of 'swift-integration-tests', directory already existsSkipping clone of 'swiftpm', directory already existsSkipping clone of 'swift', directory already existsSkipping clone of 'swift-corelibs-libdispatch', directory already existsSkipping clone of 'icu', requested by user
  • 這一步特別重要,因為 update-checkout 會 clone 編譯 swift 相關的庫,不然之后編譯 swift 的過程中一定會失敗。
③ 編譯
  • 編譯過程中,既可以使用 njnia ,也可以使用 Xcode 來進行編譯。在實際的編譯測試過程中,Xcode 編譯之后的支持性不是特別好,推薦使用 njnia 來編譯。
  • 利用 swift 源碼中的腳本編譯:
./swift/utils/build-script -x -R --debug-swift
  • 或者執行以下腳本查閱命令:
./swift/utils/build-script -r --debug-swift-stdlib --lldb
  • 編譯完成如下:

④ 調試 Swift
  • 要在 Xcode 中打開 Swift 項目,請打開/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。
  • 它將為所有可用目標自動創建很多方案。常見的調試流程將涉及:
    • 選擇 swift scheme。
    • 調出 scheme 編輯器(??<)。
    • 選擇 Arguments 選項卡,然后單擊 +。
    • 添加命令行選項,這個根據自行需求設置,如果沒有特殊需求,正常編譯。
    • 關閉scheme 編輯器。
    • 編譯并運行。
⑤ 使用 VSCode 調試 Swift
  • 打開 VSCode 安裝 CodeLLDB 插件,如下所示:

  • 配置JSON 文件,如下所示:

  • 配置內容如下:
"version": "0.2.0","configurations": [{"type": "lldb","request": "launch","name": "Debug","program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift","args": [],"cwd": "${workspaceFolder}"}]
  • 注意:上面的 program 文件路徑需要和你編譯的文件路徑相同。
  • Run 之后:

  • 過掉斷點:

  • 示例如下:

  • 在調試 .swift 文件的時候,可能不會出現上面 3 的情況,解決辦法如下:
    • 先找 LLDB 的安裝路徑,如下:

    • 然后找到編譯之后的 LLDB 的文件路徑,把這里面的文件全部拷貝到上面的目錄之下:

    • 同時修改 CodeLLDB 的 lib 文件下的 dylib 文件:

    • 切換到終端,然后就可調試 Swift 源碼。
  • 在終端中輸入以下代碼(也可以從 swift 文件拷貝):

  • 在源碼中搜索 *_swift_allocObject,加上斷點:

  • 繼續在終端輸入 var t = YDWTeacher(),然后回車:

  • 這樣我們就可以愉快的玩耍調試 Swift 源碼啦!

總結

以上是生活随笔為你收集整理的Swift之源码编译的环境搭建和编译流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。