1. 程式人生 > >LInux下C語言原始碼編譯的過程

LInux下C語言原始碼編譯的過程

原始碼編譯的過程:原始碼–>預處理–>編譯–>彙編–>連結–>執行
大致可分為三步:./configure—>make—>make install

總的來說:make就做了編譯彙編的工作,他是根據makefile的檔案來編譯彙編的;而makefile是configure根據一個叫做makefile.in的模板檔案生成的;makefile.in是由一個叫automake的工具生成的,configure是由一個叫autoconf的工具生成的。make install把編譯好的檔案複製到指定的目錄,說到底就是呼叫了install命令。

詳細的說(最近在安裝了nginx,所以就用nginx舉例):

這三步分別為:
1. ./configure [options]

--help:獲得其支援使用的選項
--prefix=/PATH/TO/SOMEWHERE:指定預設安裝位置;預設為/usr/local/;
--sysconfdir=/PATH/TO/SOMEWHERE:配置檔案安裝位置;
--enable-FEATURE[=ARG]:開啟指定特性以及安裝路徑;預設開啟時無須指定;
--disable-FEATURE:關閉指定特性;預設關閉時無須指定;
--with-PACKAGE[=ARG]:安裝指定依賴包以及其安裝路徑;
--without-PACKAGE:不安裝指定依賴包;

執行configure指令碼的作用:
①使用者可以通過選項傳遞引數給configure指令碼,以指定啟用的功能特性、安裝路徑等;而configure指令碼在執行的過程中會參考使用者的指定以及Makefile.in檔案生成makefile檔案;
②檢查程式指定要啟用的功能特性所依賴到的外部環境。

—我們指定好安裝的路徑,加上自己決定的選項:嘗試第一次生成Makefile檔案:
這裡寫圖片描述
—我們發現這個過程並沒有進行下去,因為有原始碼編譯器GCC未安裝,安裝完成GCC後,我們再次生成Makefile檔案:
這裡寫圖片描述
這裡寫圖片描述
—這次又有兩個依賴項pcre-devel和 openssl-devel,安轉完成後發現終於可以生成Makefile檔案了!!
這裡寫圖片描述
2. make
作用:make會執行真正的編譯操作,但make本身並不是編譯器,它只是一個專案構建工具,make程式會根據執行configure指令碼所生成的makefile(Makefile)檔案,並呼叫所需要用到的編譯器(GCC)來構建應用程式。
3. make install
作用:在前面的make程式執行之後,在當前目錄下會創建出已編譯完成的目標二進位制格式的應用程式(包括二進位制程式、庫檔案、配置檔案及幫助文件等),而make install則會執行安裝操作,即把當前目錄下已編譯好的程式包(二進位制程式、庫檔案、配置檔案及幫助文件等)複製到使用者指定的各個目錄下。

那麼我們做上邊這些的前提肯定是先得到官網下載到的原始碼包(一般是bz2或者是gz形式,包裡一般有readme或者是install文件,這裡面有關於本原始碼該如何編譯安裝,可以仔細看看),接著在linux下解壓原始碼包。

再補充幾點:
1. 上面make後,可以使用make clean將編譯引數清空,接著重新make;
2.上面configure發現錯誤,可以使用makedistclean,將configure引數全部清空,接著重新./configure–>make;