官术网_书友最值得收藏!

1.3 構建工具

在Linux上有很多C/C++的構建工具,最常用的是make,此外還有cmake、scons等,本書采用的是Boost自帶的構建工具b2——boost build v2。它是專門為構建Boost這樣的復雜度的軟件而開發的構建工具,其功能強大卻又靈活方便,可以輕松管理任何規模的軟件,我們已經在安裝Boost時見識了它的威力。

本節僅對b2進行簡略介紹,它的更多功能和使用方式的講解已經超出了本書的范圍。

1.3.1 安裝方式

我們需要在安裝Boost程序庫后再安裝b2程序。

在Boost解壓縮后的根目錄下執行以下命令:

b2默認會被安裝到“/usr/local/bin/”目錄下。

1.3.2 構建腳本

和make等構建工具一樣,b2也使用文本格式的構建腳本來管理代碼,其名稱通常是“jamfile”或“Jamfile”。此外b2還有一個特殊的“jamroot”文件,它需要放在整個項目的根目錄下,用于管理項目樹,定義整個項目的構建設置。

例如,本書源代碼的目錄結構如下:

jamroot文件一般用于定義整個項目里通用的編譯參數、包含路徑等設置,避免每個子目錄里的jamfile重復定義。對于Linux+GCC來說,常用的配置如下:

1.3.3 構建語言

b2使用的構建語言稱為bjam,它是一種解釋型語言,擁有完整的語法定義,包括變量、分支、循環語句、函數,甚至還包括類,如果讀者熟悉shell、awk等腳本語言就會發現它們之間有很多相似之處。

完整地講解bjam語言將耗費大量篇幅,這里僅介紹一些常用的構建指令(實際上是bjam語言里的函數調用),對比make等同類工具可以看到其語法非常簡潔。

構建目標程序e,使用源碼xxx.cpp、yyy.cpp和庫zzz:

exe e: xxx.cpp yyy.cpp zzz;

構建目標t,并且在編譯后自動運行,通常用于單元測試:

unit-test t: xxx.cpp;

定義鏈接庫zzz,它依賴depend_libs:

lib zzz: depend_libs;

需要特別注意一點:bjam是基于token的語言,它使用空格、tab等空白字符來區分語法元素,不僅是單詞,即使是“:”“;”這樣的標點符號前后也必須要有空格,否則bjam將無法識別標點,導致語法錯誤。

下面的語句里“:”“;”與前面的單詞連在了一起,這是一個典型的錯誤示例:

1.3.4 構建命令

實際上b2是bjam語言的解釋器,它查找當前目錄下的jamfile,并向上查找jamroot,解釋執行其中的bjam語句,最終完成軟件的構建。

常用的b2命令行參數如下:

通常我們直接執行b2就可以完成構建工作,它將構建jamfile中的所有目標,就像make all一樣。

主站蜘蛛池模板: 会泽县| 武山县| 徐汇区| 阿拉善盟| 元江| 锡林浩特市| 乃东县| 涞水县| 平乐县| 新营市| 星子县| 合作市| 济源市| 镇康县| 广平县| 锡林郭勒盟| 东阿县| 广昌县| 广德县| 黄梅县| 驻马店市| 莱州市| 喀什市| 襄汾县| 兰考县| 肃南| 乐业县| 胶州市| 山阴县| 广安市| 海门市| 中宁县| 滨州市| 天水市| 北碚区| 建宁县| 镇康县| 赤峰市| 合山市| 长白| 左贡县|