文章轉載自:http://nonfu.me/p/4753.html
http://blog.csdn.net/cheng157507947/article/details/44040035
這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。
./configure是用來檢測你的安裝平台的目標特征的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本。
make是用來編譯的,它從Makefile中讀取指令,然后編譯。
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
AUTOMAKE和AUTOCONF是非常有用的用來發布C程序的東西。
1、configure
這一步一般用來生成 Makefile,為下一步的編譯做准備,你可以通過在 configure 后加上參數來對安裝進行控制,比如代碼:
./configure --prefix=/usr
上面的意思是將該軟件安裝在 /usr 下面,執行文件就會安裝在 /usr/bin (而不是默認的 /usr/local/bin),資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share)。
同時一些軟件的配置文件你可以通過指定 --sys-config= 參數進行設定。有一些軟件還可以加上 --with、--enable、--without、--disable 等等參數對編譯加以控制,你可以通過允許 ./configure --help 察看詳細的說明幫助。
2、make
這一步就是編譯,大多數的源代碼包都經過這一步進行編譯(當然有些perl或python編寫的軟件需要調用perl或python來進行編譯)。
如果 在 make 過程中出現 error ,你就要記下錯誤代碼(注意不僅僅是最后一行),然后你可以向開發者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系統少了一些依賴庫等,這些需要自己仔細研究錯誤代碼。
make 的作用是開始進行源代碼編譯,以及一些功能的提供,這些功能由他的 Makefile 設置文件提供相關的功能,比如 make install 一般表示進行安裝,make uninstall 是卸載,不加參數就是默認的進行源代碼編譯。
make 是 Linux 開發套件里面自動化編譯的一個控制程序,他通過借助 Makefile 里面編寫的編譯規范進行自動化的調用 gcc 、ld 以及運行某些需要的程序進行編譯的程序。一般情況下,他所使用的 Makefile 控制代碼,由 configure 這個設置腳本根據給定的參數和系統環境生成。
3、make install
這條命令來進行安裝(當然有些軟件需要先運行 make check 或 make test來進行一些測試),這一步一般需要你有 root 權限(因為要向系統寫入文件)
常見問題及解答(Q&A):
Q1: 安裝原碼程序時,都要執行三步:
./configure make make install
他們是什么意思呀?configure要用到gcc或cc。但make時,需要什么?
A1:這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。./configure是用來檢測你的安裝平台的目標特征的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本。make是用來編譯的,它從Makefile中讀取指令,然后編譯。make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
Q2:cc和gcc又是什么?我在用./configure時,它老說我沒有cc,無法進行安裝,怎么才能有cc?
A2:CC是gcc的連接,gcc是編譯器,你安裝的時候大概是沒有選擇開發工具。你自己到光盤上找一下gcc* 吧.裝上就行了。或者yum -y groupinstall "Development Tools" 自動安裝基本開發工具。
CC是makefile里用來定義編譯器的,是為了方便代碼移植而設定,因為不同的平台可能用到不同的編譯器
for exampe: x86 gcc mips64 gcc-mips64
當我們把x86下的code移植到mips64時,只要將makefile里CC=gcc改成CC=gcc-mips64 而不需要將所有出現gcc的地方都改成gcc-mips64。
Linux CC與Linux GCC的區別概括介紹:
從名字上看,老的unix系統的CC程序叫做C Compiler。但GCC這個名字按GNU的說法叫做Gnu Compiler Collection。因為gcc包含很多編譯器(C, C++, Objective-C, Ada, Fortran,and Java)。所以它們是不一樣的,一個是一個古老的C編譯器,一個是編譯器的GNU的編譯器的集合(Gcc里的C編譯器比CC強大太多了,所以你沒必要用CC)。當你調用gcc時不一定是調用的C/C++編譯器,是gcc根據文件擴展名自動識別並調用對應的編譯器,具體可查閱$man gcc。
你是下載不到CC的,原因是:CC來自於昂貴的Unix系統,CC是商業軟件,要想用你需要打電話,寫訂單,而不是打開你的Browser去download。
linux下的cc是gcc的符號鏈接,可以通過$ls –l /usr/bin/cc來簡單察看。而編譯時看到的控制台輸出CC則是一個指向gcc的變量,該變量是make程序的內建變量,就算你在Makefile中沒有CC= ,該變量也會存在,並默認指向gcc。cc的符號鏈接和變量存在的意義在於源碼的移植性,可以方便的用GCC來編譯老的用cc編譯的unix軟件,甚至連Makefile都不要改。而且也便於linux程序在unix下編譯。
近幾年的一個新情況是越來越多的unix用戶,據我所知像solaris,bsd用戶也不太使用CC了,人們都一定要裝一個gcc,用它來編譯C/C++程序。原因顯而易見,gcc足夠強大,健壯。支持估計目前為止只有它支持的ISO c/c++ 新特性。當然你最好不要使用night版本的gcc。
Q3:make 和 make install 中的mark是系統自帶的命令還是可執行程序文件?make install中,是不是可以認為 install是mark的參數???
A3:install 不是make的參數,而是在makefile(Makefile)中有如:install:的語句。如果用make install,那么就執行install:后面的語句。
Q4:./config是linux自帶的嗎?我一make ,老提示我找不到核心類庫。
A4:你去把linux的內核模塊安裝好就行了,在linux的第二張盤里軟件的安裝方法不是一成不變的,具體的步驟看隨tarball提供的INSTALL或者README
Q5:Makefile是什么東東?有什么用?怎么用?
A5:makefile是用於自動編譯和鏈接的,一個工程有很多文件組成,每一個文件的改變都會導致工程的重新鏈接-----但是不是所有的文件都需要重新編譯,makefile能夠紀錄文件的信息,決定在鏈接的時候需要重新編譯哪些文件!
在unix系統下,makefile是與make命令配合使用的。
有了這個Makefile文件,不論我們什么時候修改了源程序當中的什么文件,我們只要執行make命令,我們的編譯器都只會去編譯和我們修改的文件有關的文件,其它的文件它連理都不想去理的。
補充一點如果運行 ./Configure 遇到了個問題
/lib/cpp fails sanity check的解決方法
在某些軟件的時候,運行./configure 會報錯,錯誤提示為:
configure: error: C++ preprocessor “/lib/cpp” sanity check
check See `config.log’ for more details
解決辦法:出現該情況是由於c++編譯器的相關package沒有安裝,在終端上執行:
$ sudo yum install glibc-headers gcc-c++