應用程式打包技術之一(原始程式碼篇)
應用程式打包技術之一(原始程式碼篇)
資料來源: http://yangwenbo.com/articles/packaging-1-src.html
相信很多朋友都曾經為方便做某件事寫過自己的小程式(像我寫過的casnet,sendsms),但很多怕都是藏在深山沒人識,最後不了了之,自己也把它們丟在角落裡忘記了。
把這些小工具上傳到技術論壇或者 CSDN 下載頻道之類的網站,還是能收到一些關注的,而且還能攢積分和聲望。但是為什麼不把它們發佈出去呢?估計有幾個原因:原始程式碼太亂,編譯又挺複雜,不好意思給別人看;二進位套裝程式不會打,不知道該怎麼發佈。
因此我打算在本系列文章中分享一下我的程式打包經驗,目前來講計畫有四篇:原始程式碼篇、deb
篇、rpm 篇和 exe 篇。這些技術在網上您都能找到,因為我也是從網上學習的,算是一個筆記和匯總吧。如果您有好的批評或建議,不妨在評論中指出,幫助我完善這篇文章。
原始程式碼篇
發行原始程式碼包是件最簡單的事情,因此也在最先介紹。有同學會說,打個壓縮包不就完了嘛。的確如此,但是在壓縮之前您也要有幾個注意事項:
1. 刪除版本管理目錄,比如 .svn,.cvs 之類的目錄。像 Subversion 版本管理軟體,會在每個目錄下都建立名為 .svn 的目錄,裡面一般保存著目錄下檔的最新版本,可以用來 revert 修改。不刪除 .svn 目錄,會使原始程式碼包臃腫,而且最重要的是可能會有安全隱患。.svn 目錄下還包含您的用戶名和 SVN 伺服器資訊,可能您並不想讓別人知道。但是如果您網速夠快的話,可以重新 svn
export
一份,而不是僅僅從您的 svn 樹上拷貝一份出來,那就沒有 .svn 目錄了。
2. 規整一下編譯過程,如果編譯過程不規範,您應該添加一個 README。如果您的代碼不是腳本,很可能是需要使用者編譯的。如果編譯過程規範,*nix(Linux/Unix, CygWin, Mingw 等) 下就是 ./configure, make, make install,用戶很容易理解。但如果編譯過程不規範,您就最好添加一下 README 或者 INSTALL 檔,指導用戶該如何編譯。使用 MS VisualStudio 的使用者要注意工程檔的整潔性,最好匯出一個
Makefile(是的,VS 也可以用 Makefile),這樣用戶就不必打開項目,在 CMD 命令列用 nmake Makefile 就可以編譯了。
3. 刪除二進位中間檔。在 *nix 開發者中,這一般不難做到,Makefile 中一般都會寫一個 clean 目標;但是 MS VS 用戶一般不會注意那些編譯時生成的 .obj 文件。原始程式碼包就應該是原始程式碼,最多包含可執行程式和文檔,而不應該包含其它任何二進位的檔。否則您的原始程式碼包就會很大,而且對用戶也是困擾,到底哪些檔有用呢?
4. 修改編譯目標從
debug 版本到 release 版本。*nix 下,這一般意味著 CFLAGS 要改成 -O2 而不是
-g;VS 一般意味著將目標從 debug 轉為 release。這樣使用者生成的可執行程式才能足夠小和足夠快,他們如果有能力自己調試,會知道如何將選項改回去的。
5. 添加智慧財產權資訊,就是授權協定。小程式大家一般都不在乎,但如果是您在這個項目上花了足夠的心血,還是最好選擇一個自己喜歡的授權協議。可以將協議聲明放在每個原始檔案的最前注釋中,也可以在專案的根目錄下放一個 license 檔。
6. 不要用 rar
包。在
Windows 下推薦使用 zip 格式壓縮;*nix 下推薦使用 .tar.gz 或者 .tar.bz2 格式。因為這些格式在這些系統上不需要安裝額外的軟體解壓。WinRAR 是一個商務軟體,而且 RAR 格式也是受版權保護的。
打包命令:
在 Windows 下,如果您使用開源軟體 7-zip 來壓縮 zip 包,可以使用這個命令(首先將 7-zip 可執行檔目錄添加到 PATH 環境變數中):
7z a foo.zip foo
*nix 下,就是下面幾個命令了:
tar czvf foo.tar.gz foo
tar cjvf foo.tar.bz2 foo
zip -r foo.zip foo