在我該系列的之前的所有隨筆中,都是采用 Linux 發行版自帶的包管理工具(如 apt-get、yum 等)進行軟件的安裝和卸載,從來沒有向大家展示使用源代碼自行編譯安裝軟件的方法。但是長期混跡於 Unix/Linux 世界的童鞋們都知道,從源代碼自行編譯安裝軟件並不是那麼的難,一般都是這樣三個步驟:
configure make make install
之所以能夠把源代碼的構建管理得如此簡單,這得益於 Gnu 的 Autotools 工具鏈。在上面的三個命令中,configure 是一個腳本,它的功能很強大,可以探測系統環境,比如探測出系統中的編譯工具版本、標准庫版本以及其它需要依賴的工具,生成一個Makefile,而後面的 make 和 make install 就根據剛生成的 Makefile 進行軟件的編譯和安裝。看似很簡單,但事實上 Autotools 工具鏈非常復雜,復雜到我多少次想學習這些工具都望而卻步。直到我遇到 Eclipse。
先來說說 Gnu Autotools,關於該工具鏈的使用方法網上有很多的博文,我這裡來一張圖片先:
可以看到,Gnu Autotools 包含了 autoscan、aclocal、automake、autoconf、autoheader 等工具,而且還涉及一門非常古老的宏語言 m4 。其工作原理是這樣的,先由 autoscan 對源碼進行掃描,生成一個 Configure.scan 文件,然後用戶對該文件進行編輯,生成 configure.in 文件。用戶還要編寫一個文件,那就是 Makefile.am 文件。然後 automake 對 Makefile.am 和 configure.in 文件進行處理,生成 Makefile.in 文件,而 autoconf 工具對 configure.in 進行處理,生成 configure 腳本, autoheader 工具對 configure.in 文件進行處理,生成 config.h.in 文件。至此,Autotools 工具的使命完成,生成的這些文件可以交付給用戶使用了。用戶拿到源碼包後,運行 configure 腳本,該腳本會處理 Makefile.in 文件,生成最後的 Makefile,同時處理 config.h.in 文件,生成 config.h 文件。有了 Makefile,用戶就可以使用 make 和 make install 編譯和安裝該軟件了。
那麼 aclocale 命令干啥用呢?這是因為 configure.in 文件中包含了大量的 m4 宏,這些宏最終都會展開為各種各樣的 Shell 代碼,用來探測系統環境。但是這些宏的定義往往散布在系統的各個角落,aclocale 命令就是將這些用到的宏收集到一個文件 aclocale.m4 中。
這個工具鏈真的是太復雜了,幸好我有 Eclipse。看過我 Java 博客的朋友都知道我是 Eclipse 粉,這裡不多說。我們來看看 Ubuntu 的軟件源中都有 Eclipse 的哪些包,如下圖:
命令sudo aptitude search eclipse 可以找出軟件源中所有包含單詞 eclipse 的軟件包,但是我要過濾一下,不是以 eclipse 開頭的不要,包含“:i386”的也不要,因為我是64位的平台,默認的軟件包正適合我,所以就有了後面的 | grep ' eclipse' | grep -v ':' ,最後,再加一個管道,使用 awk 命令只顯示第2列,也就是軟件包的名字。結果如上圖所示。
從這些結果中可以看出,eclipse-cdt 是用來寫 C/C++ 代碼的 IDE 環境,而且還有 eclipse-cdt-autotools 包可用,那真的是正中我的下懷。不過我更貪心一點,我想安裝所有的這些和 eclipse 相關的包,怎麼辦?有辦法,在上面的命令後面再加上 | xargs echo sudo aptitude install 即可生成一個安裝所有這些包的命令。我把生成的結果重定向到一個腳本文件,給該腳本文件加上執行權限,然後運行它,如下圖:
回答一個“y”,就耐心地等待 eclipse 的安裝吧。安裝完成後,啟動 eclipse ,新建項目的時候就可以選擇 C++ 項目了,如下圖:
點下一步,是如下界面:
可以看到有很多種項目類型可以選擇,Eclipse 既可以使用它自己的項目文件管理 C/C++ 項目,也可以使用 Makefile 管理項目,當然,我們這裡選擇使用 Gnu Autotools 管理項目,而且選擇簡單的“Hello World”示范項目。點下一步,如下圖:
輸入一些項目相關的信息,再繼續點下一步,如下圖:
如果點那個“Advanced settings”按鈕,還可以對 Gnu Autotools 工具鏈進行更詳細的設置。如下圖:
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-03/115052.htm
------------------------------分割線------------------------------
C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm
讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm
讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm
讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm
將C語言梳理一下,分布在以下10個章節中: