做个对比实验
先把源代码打包成tar文件,记录大小。这个大小就是原始大小。然后进入项目目录,新建build文件夹(随意)后在用CMake在build文件夹内构建和编译。完成构建后删除build目录并重新打包,记录新包的大小。比较两个包的大小。
操作
首先在构建之前打包源代码目录,fcitx5.tar,这个打包文件的大小是:7751680字节。然后开始构建: mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/tmp/test_build/fcitx5 … cmake --build . 然后删除build目录,去外面重新打包。 新打包出来的文件大小是:8345600字节。
原始大小:7751680,新包大小:8345600,多了620KB。所以,构建生成的文件就算单独在特定文件夹下,还是会污染原来的项目的。
那么,到底多了什么文件呢?
为了研究这个问题,同样通过比较。在构建后删除构建目录的项目内,删除.gitignore,然后用git工具把所有的文件添加并提交到git版本跟踪。以这个仓库作为测试场地,删除除了.git这个文件夹外的所有文件,包括隐藏文件。接着,找到Fcitx5的原始的未构建的代码,解压放入仓库里面,连同隐藏文件一起放入,并删除.gitignore。
然后执行git status命令。入下:
$ git status
位于分支 main
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git restore <文件>..." 丢弃工作区的改动)
删除: src/modules/spell/dict/en_dict-20121020.tar.gz
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
显然,Fcitx5构建会生成一个gz 结尾的文件,位于项目内的src/modules/spell/dict/ 。为了检查这个文件是不是造成多了620KB的元凶,去新的包内删除这个文件重新打包发现能恢复原始的包尺寸。
多了的文件怎么来的呢?
还得从源代码里面看。我找到文件:
src/modules/spell/dict/CmakeLists.txt
在里面看到这个:
set(SPELL_EN_DICT_VER 20121020)
set(SPELL_EN_DICT "${CMAKE_CURRENT_BINARY_DIR}/en_dict.fscd")
set(SPELL_EN_DICT_SRC "${CMAKE_CURRENT_BINARY_DIR}/en_dict.txt")
set(SPELL_EN_DICT_TAR "en_dict-${SPELL_EN_DICT_VER}.tar.gz")
set(SPELL_EN_DICT_URL
"https://download.fcitx-im.org/data/en_dict-${SPELL_EN_DICT_VER}.tar.gz")
fcitx5_download(spell-en-download ${SPELL_EN_DICT_URL} ${SPELL_EN_DICT_TAR}
c44a5d7847925eea9e4d2d04748d442cd28dd9299a0b572ef7d91eac4f5a6ceb)
fcitx5_extract(spell-en-extract "${SPELL_EN_DICT_TAR}" DEPENDS spell-en-download
OUTPUT ${SPELL_EN_DICT_SRC})
显然,这个文件是在编译的过程中从网站上下载下来的,难怪编译的时候那么慢!
|