xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.04k stars 785 forks source link

想更多的詢問有關自動產生 .xmake 目錄的更多細節 #241

Closed orzuk-lmj closed 5 years ago

orzuk-lmj commented 6 years ago

您好,想更多的詢問有關自動產生 .xmake 目錄的更多細節。 以前在使用cmake過程中,為了讓專案結構乾淨容易閱讀,會做原始碼和跨平台檔案的分離。 舉個例子,我通常會把專案整理成底下這種形式,然後用簡單的執行shell檔案直接編譯:

MyProject
|
+--- Build
|       + windows-msvc2015-x86
|            + output
|                 - MyProject.dll
|            - MyProject.sln
|
|       + windows-msvc2017-x64
|            + output
|                 - MyProject.dll
|            - MyProject.sln
|
|       + android-armv7a
|            + output
|                 - MyProject.so
|            - Makefile
|
|       + android-x86
|       + ios-9
|       + ...
|
+--- BatShell
|       - build_windows_msvc2015_x86.bat  <-- 為了方便快速,平時都直接執行這種
|       - build_windows_msvc2017_x64.bat
|       - build_android_armv7a.sh
|       - build_android_x86.sh
|       - build_ios_9.sh
|
+--- Source
|       - Public/*.h
|       - Private/*.cpp
|       - CMakeLists.txt  <-- 替換成 xmake.lua
|       
|       + .xmake  <-- (替換成xmake後自動產生的目錄)
|

但是從轉成 xmake 的使用過程中,執行了多個 $ xmake f -p xxx 之後 發現到會自動產生 .xmake 目錄,且會保存當前設定,而且快取了每個平台的資料

waruqi commented 6 years ago

請問這是預期中的行為模式嗎?

是的,就跟vscode有.vscode一样,xmake也会在 .xmake会存储当前的配置,缓存各种检测结果(编译器、依赖库信息等),以及一些依赖库,用于加速每次编译,简化操作,避免每次xmake, xmake -r, xmake clean等操作,都去重新配置,重新检测,例如:

# 一次配置,缓存所有配置结果,相当于autoconf里面的./configure
$ xmake f -p android  --cxflags="xxx" --ndk=xxxx --module1=y

# 之后的所有编译,安装,打包,运行等命令都基于之前配置,而不需要重复配置,简化操作
$ xmake
$ xmake clean
$ xmake install
$ xmake run
$ xmake package

当然,也可以通过$ xmake f -c去忽略缓存,每次强制重新检测一些配置

如果希望能更乾淨的切割整理中間過程產生的暫時檔案,可以給個建議嗎?

可以执行$ xmake clean --all 清空 build下所有生成的临时文件,以及删除整个.xmake目录

或者添加 .gitignore 文件,去忽略 .xmake 目录,避免提交到git

或者可以更新我刚提交的master版本,或者下载 https://github.com/tboox/xmake/releases/download/v2.2.2/xmake-v2.2.3-dev.exe

然后通过设置XMAKE_CONFIGDIR环境变量,来切换本地配置缓存的目录,例如:

$ export XMAKE_CONFIGDIR=/tmp/myproject/conf_cache
$ cd myproject
$ xmake

这个时候所有.xmake缓存文件,都会直接存储到/tmp/myproject/conf_cache,来保持当前项目更加干净

orzuk-lmj commented 6 years ago

請問,如果在shell先使用$ export XMAKE_CONFIGDIR=xxx之後執行xmake,那麼自定義腳本內後續 os.vrunv("xmake", .......) 的打包或安裝會受到影響嗎?

waruqi commented 6 years ago

会的 如果你不想影响 可以通过 os.getenv os.setenv os.addenv去保存和重置他们,在内部运行的时候