gcc所遵循的部分約定規則:
.c爲後綴的文件,C語言源代碼文件;
.a爲後綴的文件,是由目標文件構成的檔案庫文件;
.C,.cc或.cxx 爲後綴的文件,是C++源代碼文件且必需要通過預處理;
.h爲後綴的文件,是程序所包含的頭文件;
.i 爲後綴的文件,是C源代碼文件且不該該對其執行預處理;
.ii爲後綴的文件,是C++源代碼文件且不該該對其執行預處理;
.m爲後綴的文件,是Objective-C源代碼文件;
.o爲後綴的文件,是編譯後的目標文件;
.s爲後綴的文件,是彙編語言源代碼文件;
.S爲後綴的文件,是通過預編譯的彙編語言源代碼文件。
在使用Gcc編譯器的時候,咱們必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,其中多數參數咱們可能根本就用不到,這裏只介紹其中最基本、最經常使用的參數。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所須要的參數,filenames給出相關的文件名稱。
-c,只編譯和彙編,不鏈接成爲可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o爲後綴的目標文件,一般用於編譯不包含主程序的子程序文件。
-o output_filename,肯定輸出文件的名稱爲output_filename,同時這個名稱不能和源文件同名。若是不給出這個選項,gcc就給出預設的可執行文件a.out。
-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,咱們就必須加入這個選項。
-O,對程序進行優化編譯、鏈接,採用這個選項,整個源代碼會在編譯、鏈接過程當中進行優化處理,這樣產生的可執行文件的執行效率能夠提升,可是,編譯、鏈接的速度就相應地要慢一些。
-O2,比-O更好的優化編譯、鏈接,固然整個編譯、鏈接過程會更慢。
-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程當中使用的參數。C程序中的頭文件包含兩種狀況∶
A)#include <myinc.h>
B)#include 「myinc.h」
其中,A類使用尖括號(< >),B類使用雙引號(「 」)。對於A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而B類,預處理程序在目標文件的文件夾內搜索相應文件。
一、預編譯----處理宏定義和include,作語法檢查,生成預編譯文件
gcc -E demo.c -o demo.i
二、編譯------生成彙編文件
gcc -S demo.i -o demo.s
三、彙編------生成目標文件(ELF格式)
gcc -c demo.s -o demo.o
四、連接------生成可執行文件
gcc demo.o -o demo工具