本文參考:
1. 什么是GCC?
The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages.
—— wiki
GCC是一套支持多語言的編輯器。它原本只能處理C語言筷弦。GCC很快地擴展勇婴,變得可處理C++假抄。之后也變得可處理Fortran拌牲、Pascal责循、Objective-C贵试、Java琉兜、Ada,以及Go與其他語言毙玻。
2. 使用
最簡單的使用為:
gcc hello.c
結(jié)果輸出a.out
可執(zhí)行文件豌蟋。
-o output_filename
這是最常用的編譯選項,用于指定要生成的可執(zhí)行文件的名稱桑滩,各參數(shù)之間的相對位置無關(guān)梧疲,但是-o之后空格緊跟所指定的文件名。
gcc -o hello hello.c
等效于
gcc hello.c -o hello
編譯出的可執(zhí)行文件运准,在Windows下就是exe(executive)幌氮。但Linux下,后綴名無限制胁澳。一般不指定后綴就可以了该互。
-g
用于給生成的可執(zhí)行文件加上調(diào)試信息,只有這樣才可使用gdb調(diào)試韭畸。
gcc -g -o hello hello.c
-c
只編譯宇智,不鏈接成為可執(zhí)行文件。編譯器只是由輸入的 .c 等源代碼文件生成對應(yīng)的 .o 為后綴的目標(biāo)文件胰丁,通常用于編譯不包含主程序的子程序文件随橘。
gcc -c hello.c
效果生成hello.o
-Idirname
將 dirname 所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)锦庸。
說明:
C程序中的頭文件包含兩種情況:
#include <stdio.h>
#include "stdio.h"
其中机蔗,使用尖括號(<>),預(yù)處理程序 cpp 在系統(tǒng)默認(rèn)包含文件目錄(如/usr/include)中搜索相應(yīng)的文件;使用雙引號蜒车,預(yù)處理程序 cpp 首先在當(dāng)前目錄中搜尋頭文件讳嘱,如果沒有找到,就到指定的 dirname 目錄中去尋找酿愧。在程序設(shè)計中沥潭,如果需要的頭文件分別分布在不同的目錄中,就需要逐個使用 -I 選項給出搜索路徑嬉挡。
-l/home/jelly/myheader
-Ldirname
將dirname所指出的目錄加入到程序函數(shù)庫文件的目錄列表中钝鸽,是在鏈接過程中使用的參數(shù)。在默認(rèn)狀態(tài)下庞钢,鏈接程序 ld 在系統(tǒng)默認(rèn)路徑中(如 /usr/lib)尋找所需要的庫文件拔恰。這個選項告訴鏈接程序,首先到 -L 指定的目錄中去尋找基括,然后到系統(tǒng)默認(rèn)路徑中尋找颜懊;如果函數(shù)庫存放在多個目錄下,就需要依次使用這個選項风皿,給出相應(yīng)的存放目錄河爹。
-L/home/jelly/mylib
-lname
鏈接時裝載名為 libname.a 的函數(shù)庫。該函數(shù)庫位于系統(tǒng)默認(rèn)的目錄或者由** -L 選項確定的目錄下**桐款。
-lm
表示鏈接名為 libm.a 的數(shù)學(xué)函數(shù)庫
-Wall
用于產(chǎn)生警告信息咸这。