gcc(g++)的詳細教程

gcc的工作流程

gcc的工作流程可以簡單分爲以下4步
  1. 預處理 --E
    (1) 宏替換
    (2) 頭文件展開
    (3) 註釋去掉

xxx.c -> xxx.i
此時,xxx.i文件依然是c文件,其實內容並沒有什麼大的變化
命令爲 gcc -E hello.c hello.i
gcc默認的編譯工具 cpp

  1. 編譯 --S
    生成彙編文件,此時xxx.s 爲彙編代碼的文件
    xxx.i -> xxx.s
    命令爲gcc -S hello.i -o hello.s
    gcc默認工具爲gcc

  2. 彙編 --c
    生成二進制文件,此時xxx.o 爲二進制文件,可以被計算機直接執行
    xxx.s ->xxx.o
    命令爲gcc -c hello.s -o hello.o
    gcc默認工具爲as

  3. 鏈接
    生成最終可執行文件
    xxx.o ->xxx 沒有後綴,因爲可執行文件一般不加後綴
    命令爲gcc hello.o -o hello
    gcc默認工具爲ld

最終流程爲hello.c —> hello.i —> hello.s —> hello.o —> hello

總結,這些瞭解一下,記住4個步驟,出了報錯信息知道是哪個步驟出了問題就可以了,一般我們就用一個gcc hello.c -o hello(gcc會自動完成4個步驟)

gcc的常用參數

  1. -v/–version 可以查看gcc的版本

  2. -I 我們在編譯的時候指定頭文件的路徑,如果頭文件和.c文件在同一個目錄中,則無需指定路徑,但.h文件和.c文件不再一個目錄的時候,就需要指定頭文件的路徑,比如,hello.c文件中包含head.h文件,head.h文件在./include目錄中,就需要gcc hello.c -o hello -I ./include

  3. -o 指定生成的程序的名稱

  4. -g 使用gdb調試的時候必須加的參數(具體會在gdb的部分詳解)

  5. -D 在編譯的時候指定一個宏

#include <iostream>
//#define DEBUG

int main()
{
#ifdef DEBUG
    std::cout << "DEBUG defined" << std::endl;
#endif
    return 0;
}					

每個文件都定義一個宏是一件非常低效的事情,我們可以在文件中不定義宏,然後用-D參數去指定宏定義。
g++ test.c -o test -D DEBUG,這樣DEBUG宏就存在了。

  1. -Wall在編譯時會顯示警告信息,比如一些已經不推薦使用的版本的函數會出現警告信息。比如int c沒有被使用,在編譯時會出現c沒有被使用的警告。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章