c語言標準
- ANSI C
- POSIX(提高UNIX程序可移植性)
- SVID(POSIX的擴展超集)
- XPG(X/Open可移植性指南)
- GNU C(唯一能編譯Linux內核的編譯器)
gcc 簡介
名稱:
- GNU project C and C++ Compiler
- GNU Compiler Collection
管理與維護 - GNU項目
對C/C++編譯的控制
- 預處理(Preprocessing)
- 編譯(Compilation)
- 匯編(Assembly)
- 鏈接(Linking)
GCC文件擴展名規范
(1).c為后綴的文件,是C語言源代碼文件。
(2).h為后綴的文件,是頭文件。
(3).C,.cc、.cpp、.cp或.cxx為后綴的文件,是C++源代碼文件。
(4).h為后綴的文件,是程序所包含的頭文件。
(5).i為后綴的文件,是已經預處理過的C源代碼文件。
(6).ii為后綴的文件,是已經預處理過的C++源代碼文件。
(7).m為后綴的文件,是Objective-C源代碼文件。
(8).o為后綴的文件,是編譯后的目標文件。
(9).s為后綴的文件,是匯編語言源代碼文件。
(10).S為后綴的文件,是經過預編譯的匯編語言源代碼文件。
gcc使用
基本使用格式
$ gcc [ 選項 ] <文件名>
生成預處理文件
生成匯編文件
gcc –S hello.c –o hello.s
生成對應的目標文件
gcc -c hello.c -o hello.o
目標代碼并不能在CPU上運行,但它離二進制可執行文件已經很近了,再輸入以下編譯指令即可生成二進制可執行文件。
[root@localhost~]# gcc hello.o -o hello
文件hello.c引用的頭文件say_hello.h不在當前目錄中,也不在GCC默認的頭文件搜索路徑/usr/include中,這時我們應該使用-I選項指定搜索頭文件的特殊目錄,具體編譯指令如下:
gcc hello.c functions/say_hello.c -o hello –I functions
make
makefile文件中還可以定義一些宏,宏的作用類似于C語言中的define命令,利用它們來代表某些多處使用而又可能發生變化的內容,可以節省重復修改的工作,還可以避免遺漏
1 CC=gcc
2 CFLAGS=-Wall-c #-Wall:編譯后顯示所有警告
3 OBJS= hello.o say_hello.o
4 hello:${OBJS}
5 ${CC} ${OBJS} -o hello
6 say_hello.o:say_hello.c say_hello.h
7 ${CC} ${CFLAGS} say_hello.c -o say_hello.o
8 hello.o:hello.c say_hello.h
9 ${CC} ${CFLAGS} hello.c -o hello.o