預處理階段通常處理文件中#ifdef #include #define命令,該階段會生成一個*.i文件,但實際工做中通常不用專門生成這個文件,若必定要生成這個文件,能夠使用以下命令函數
#gcc -E test.c -o test.i調試
該階段輸入中間過程*.i文件,生成彙編語言文件*.s,能夠使用以下命令code
#gcc -S test.i -o test.s開發
此階段,輸入.s文件,生成二進制機器碼文件.o,對應命令原型
# gcc -c test.s -o test.o編譯器
此階段輸入.s文件與其餘庫文件聚集成一個二進制代碼文件,對應命令源碼
#gcc test.o -o testio
-c: 只編譯成二進制文件,不連接,一般編譯沒有main函數的c文件編譯
-o:輸出文件名test
-g:產生gdb所需的符號信息,要對源碼進行調試,就必須在編譯的時候加入此參數
-Idirname:將名爲dirname的目錄加入到程序頭文件目錄列表中,他是在預處理階段使用的選項,I指Include。
在C程序中,頭文件被大量使用,通常而言,C程序一般有頭文件和定義文件組成,頭文件是包含函數原型聲明/常量定義的文件,用於保存程序的聲明,而定義文件用於保存程序的實現。
#include <stdio.h>
#include "mycode.h"
對於第一種,gcc在系統預設的路徑查找頭文件(如/usr/include),一般用於系統文件,第二種,會首先查找當前文件夾中查找頭文件,若是沒有找到,再去制定的dirname中查找。
在實際開發中,對本身編寫的頭文件,通常放到一個執行目錄下,編譯的時候指明這個目錄就能夠了,不然編譯器會由於找不到頭文件目錄而失敗
-Ldirname:將dirname目錄加入到程序的庫文件搜索目錄中,他是在連接過程當中使用的參數,L指Link。