- Boost程序庫完全開發指南:深入C++”準”標準庫(第5版)
- 羅劍鋒
- 847字
- 2020-05-22 18:05:59
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一樣。
- Practical Data Analysis Cookbook
- 小創客玩轉圖形化編程
- 算法精粹:經典計算機科學問題的Java實現
- 動手玩轉Scratch3.0編程:人工智能科創教育指南
- 精通API架構:設計、運維與演進
- 正則表達式經典實例(第2版)
- Windows內核編程
- Julia 1.0 Programming Complete Reference Guide
- 零基礎學C語言程序設計
- MongoDB Administrator’s Guide
- RESTful Web API Design with Node.js(Second Edition)
- JSP應用與開發技術(第3版)
- 讀故事學編程:Python王國歷險記
- C語言程序設計實驗指導與習題精解
- Java編程動手學