Change log
目錄
[bazel]-導(dǎo)讀
[bazel]-概念和術(shù)語
[bazel]-bazel的使用
[bazel]-tulsi的使用
[bazel]-如何編譯
[bazel]-緩存
[bazel]-影響緩存命中的因素
[bazel]-優(yōu)化
項目地址
Change log
2021-01-15:更新tulsi
官方的tulsi對Xcode支持有些問題。推薦使用bilibili修改后的tulsi。
地址:https://github.com/bilibili/tulsi
一.是什么
tulsi GitHub地址: https://github.com/bazelbuild/tulsi
tulsi使用: https://tulsi.bazel.build/docs/gettingstarted.html
tulsi使用Bazel的BUILD中的信息來生成Xcode Project.
注意.他只是用來幫我們生成Xcode Project文件的.
至于編譯和簽名都還是Bazel干的事.
二.安裝
tulsi GitHub地址: https://github.com/bazelbuild/tulsi
step1: git clone https://github.com/bazelbuild/tulsi.git
step2: cd tulsi
step3: sh build_and_run.sh
三.怎么用
step1:
將前面編譯生成的tulsi.app復(fù)制到GXBazelShell文件夾下的tools目錄下
step2: Create a new Tulsi project
首先打開tulsi軟件 -> Create New project
輸入你app的名字.如universal
step3: Choose the WORKSPACE file
點擊Workspace location右邊的那一排灰字.
選擇剛才創(chuàng)建的WORKSPACE文件.
step4:
這里是給項目中添加任何BUILD文件的位置,以及設(shè)置Bazel二進制文件的路徑,該二進制文件將用于生成Xcode項目和編譯.
現(xiàn)在我們要創(chuàng)建的是universal這個target的project.
所以應(yīng)該選擇universal目錄下的BUILD文件.
注意:
這一步你可以指定使用的bazel的路徑.
如上圖.我指定的是/usr/local.....下的bazel.
但是這樣的話.每個開發(fā)使用的bazel就可以能不統(tǒng)一.
(例如A開發(fā)安裝的是0.15.2版本.B開發(fā)安裝的是0.17.2版本.)
所以我們可以將bazel放在workspace目錄下.并上傳到git倉庫里.
如下.我就將bazel放在了//:workspace/bin/bazel/0.17.2目錄下了.
然后所有開發(fā)都必須將工程clone到同一目錄下.(如/opt/bazel-workspace)
那么在創(chuàng)建tulsi配置文件的時候就可以將bazel的路徑修改為/opt/bazel-workspace/bin/bazel/0.17.2/下的bazel了.
這樣所有人都使用的是同一個bazel版本了.
這里我們可以再優(yōu)化一下.
將/opt/bazel-workspace/bin/bazel/0.17.2/bazel-0.17.2..win-x86_64 做一個軟鏈bazel-wrapper.放在workspace根目錄下.
然后tulsi配置文件就將bazel的路徑設(shè)置為/opt/bazel-workspace/bazel-wrapper.
以后你想升級bazel.就只需要更改bazel-wrapper的真實路徑就可以了.就不用修改tulsi的配置文件了.
step5: shared options
默認即可
step6: Create project generator configs
點擊頂部的configs選項
然后點擊'+'號.會彈出如下彈窗
彈窗會讓你選擇存放路徑.即存放生成的.tulsiproj文件的路徑
step7: 選擇該tulsiproj文件與哪個app關(guān)聯(lián)
step8: 自定義配置configs 默認即可
step9: 選擇target
step10: 給你的target取個名字.
step11.點擊右下角的generate按鈕.選擇保存路徑即可
step: over
至此大功告成.當你點擊Generate后tulsi會自動幫你生成xcodeproj文件.然后幫你打開.如下
在這個project下.你的開發(fā)跟原來一模一樣.
唯一的潛在區(qū)別就是當你點擊run按鈕的時候.
Xcode走的是Build Phases -> Run Script -> bazel_build.py這個腳本.
讓bazel幫你編譯.
優(yōu)化
這里的universal.tulsi.tulsiproj其實就是個模板.
告訴tulsi怎么生成我們想要的xcodeproj文件.
所以這里的universal.xcodeproj應(yīng)該加入到.gitignore文件里.
使用優(yōu)化
每個人拉取你的工程時.都要用tulsi軟件去生成這個.xcodeproj文件.
這樣太麻煩了.
tulsi給我們提供了通過命令行來創(chuàng)建.xcodeproj文件的方式.
我們可以在根目錄下創(chuàng)建build.sh腳本.
在這個腳本里調(diào)用tulsi的命令創(chuàng)建.xcodeproj文件
#!/bin/sh
set -e
echo "通過//universal/universal.tulsi.tulsiproj文件生成universal.xcodeproj文件"
./tools/Tulsi.app/Contents/MacOS/Tulsi -- genconfig --genconfig universal/universal.tulsi.tulsiproj:universal
這樣當別人要運行你的項目時.
只需要兩步
1.git clone你的倉庫.
2,運行build.sh腳本.
遇到的bug:
問題一:版本選擇錯誤
/opt/Mine/tulsi(master) ? sh build_and_run.sh xxx@xxx
ERROR: /private/var/tmp/_bazel_xxx/ecd97368bb045b45661f8a6d7e6ead6a/external/local_config_xcode/BUILD:12:1: in xcode_config rule @local_config_xcode//:host_xcodes: --xcode_version=11.3.1 specified, but '11.3.1' is not an available Xcode version. available versions: [11.4.0.11E146]. If you believe you have '11.3.1' installed, try running "bazel shutdown", and then re-run your command.
ERROR: Analysis of target '//:tulsi' failed; build aborted: Analysis of target '@local_config_xcode//:host_xcodes' failed
INFO: Elapsed time: 0.061s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (1 packages loaded, 0 targets configured)
解決辦法:
查看.bazelrc.發(fā)現(xiàn)這里設(shè)置的是11.3.1.將這里改成你的xcode版本即可邮旷。
cat .bazelrc
build --cpu=darwin_x86_64
build --apple_platform_type=macos
build --xcode_version=11.3.1 // 就是這行有問題
# Disable the Swift compilation worker when running integration tests, since it
# requires the protobuf dependency which is infeasible to get working on Bazel.
build --define=RULES_SWIFT_BUILD_DUMMY_WORKER=1
build --strategy=SwiftCompile=local
# Stop gap for https://github.com/bazelbuild/tulsi/issues/94.
# See also: https://github.com/bazelbuild/rules_apple/issues/456.
build "--host_force_python=PY2"
問題二:新添加的文件夾不顯示
我在根目錄添加了srcs文件夾距帅。
并在srcs文件夾里添加了新的BUILD巡验。
該BUILD也被其他BUILD依賴了加袋。
但是使用tulsi構(gòu)建出來的工程目錄里卻沒有顯示該路徑辛友。
解決:
如果你新添加了文件夾后需要修改universal.tulsi.tulsiproj文件速侈。
將你新添加的文件夾添加進去率寡。
1.打開之前創(chuàng)建的tulsi模版
2.打開之前創(chuàng)建的universal
3.勾選你新建的package
這里把他們勾選上。并save倚搬。重新構(gòu)建project即可在xcode目錄中顯示了冶共。
還有個前提是你新建的這個package必須有其他已經(jīng)顯示的package依賴他。否則他也不會顯示。
下一篇:[bazel]-如何編譯