./configure
make
make install
原始碼安裝三部曲,一直在使用卻一直知其然不知其所以然,今天就說說所以然。
原始碼到成為可執行程式經歷了一下步驟
原始碼–>預處理–>編譯–>彙編–>鏈結–>執行make就做了編譯彙編的工作,當然也也不是隨隨便便就幹活的,要有依據,那他是根據什麼幹活的呢?根據乙個叫makefile的檔案。那麼makefile哪來的呢?configure生成的。現在指定為什麼make之前要執行./configure了吧。
configure也是個懂規矩的孩子,他也不會亂生成的,他會根據乙個叫做makefile.in的模板檔案生成makefile。
問題又來了,makefile.in哪來的呢?當然是由乙個叫automake的工具生成的。configure哪來的啊。他是由乙個叫autoconf的工具生成的。
make install幹了寫什麼呢,其實他就幹了乙個工作,把編譯好的檔案複製到指定的目錄。說到底就是呼叫了install命令。可以自己去搜一下install命令,這個是個拷貝命令。
下面我們來總結一下整個編譯安裝的過程經歷了什麼。
在發布原始碼包前開發人員用automake生成makefile.in,用autoconf生成configure腳步
然後我們拿到的原始碼包,裡面有原始碼、makefile.in檔案、configure腳步。
我們執行./configure根據自己的配置和makefile檔案中的配置進行結合,處理依賴包的關係,生成makefile檔案
執行make命令根據makefile的資訊,呼叫編譯工具,可能是gcc也可能是其他編譯器,對原始碼進行編譯
執行make install將編譯後生成的檔案複製到指定位置。
整個編譯完成。
這樣就可以用了嗎?可以。
但是貌似啟動起來好麻煩,得切換到安裝的目錄的bin目錄下,要是能直接在命令列的任何路徑下都能管理啟動或是關閉就好了,你還要對一些執行檔案做軟連線,新增環境變數,設定啟動服務等,要不然你每次都要到程式的安裝目錄去執行這是多麼痛苦的事啊。 (以apache為例):
匯出二進位制程式目錄至path環境變數中;
編輯檔案/etc/profile.d/httpd2.2.sh檔案,在檔案中寫入下邊一行即可;(注意,httpd2.2.sh檔案並不存在,建立即可)
儲存退出,要讓此設定即刻生效,需要在當前目錄下執行命令
現在我們就可以在系統的任何路徑下開啟或關閉httpd服務了,而不用記住那一長串的路徑了
匯出標頭檔案(可以將目錄建立乙個符號鏈結,或者所有標頭檔案每乙個檔案都建乙個)
基於鏈結的方式實現:
configure腳步配置選項說明
安裝路徑設定
–prefix=path/to/dir 指定預設安裝路徑
–sysconfdir=path/to/dir 配置檔案安裝位置
system types:
optional features:可選特性
–disable-feature 禁用某特性
–enable-feature[=age] 啟用某特性
optional packages:可選包
–with-package[=package] 依賴的包
–without-package 不需要的包
原始碼編譯安裝軟體包
1 準備編譯環境,linux中絕大多數軟體的原始碼都是用c語言寫的,少部分用c 或其他語言編寫。因此想要編譯源 需要先按照gcc編譯器和gcc c 編譯器。安裝編譯器和常用庫 yum groupinstall y development tools yum install y gcc gcc c a...
Linux 原始碼包安裝軟體
在linux bsd系統中,軟體包主要以兩種形式出現 二進位製包以及源 包。之前一直說的rpm包就是屬於二進位製包,也就是已經編譯好的軟體包.這裡說源 包則主要適用於自由軟體的安裝,使用者需要自己編譯它們。一般是我們手動指定安裝在 usr local下,相當於windows下是program fil...
原始碼包編譯安裝
源 預處理 編譯 彙編 鏈結 執行1 configure 1 通過選項傳遞引數,指定啟用特性 安裝路徑等 執行時會參考使用者的指定及makefile.in檔案聲稱makefile。2 檢查依賴到的外部環境,如依賴的軟體包。2 make 根據makfile檔案,構建應用程式。3 make instal...