系統求助
man 函數名
man 2 函數名 - 表示函數是系統調用函數
man 3 函數名 - 表示函數是C的庫函數
eg:man fread
man 2 write
若是咱們要write這個函數的說明,當咱們執行man write時,輸出的結果卻不是咱們所須要的. 由於咱們要的是write這個函數的說明,但是出來的倒是write這個命令的說明.爲了獲得write的函數說明 咱們要用 man 2 write. 2表示咱們用的write這個函數是系統調用函數,還有一個咱們經常使用的是3表示函數是C的庫函數.
makefile
註釋行以#開頭
Makefile中最重要的是描述文件的依賴關係的說明.
通常的格式是:
target: components
TAB rule //TAB處是一個tab鍵
第一行表示的是依賴關係.
第二行是規則.
eg:
# 這是上面那個程序的Makefile文件 <註釋>
main:main.o mytool1.o mytool2.o <目標:依賴>
gcc -o main main.o mytool1.o mytool2.o <規則>
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
make執行的時候能夠指定要執行的目標:make target
make mytool2.o //就只會執行 gcc -c mytool2.c這個命令
Makefile經常使用的三個變量:
$@ -- 目標文件
$^ -- 全部的依賴文件
$< -- 第一個依賴文件
eg:
# 這是上面那個程序的Makefile文件 <註釋>
main:main.o mytool1.o mytool2.o <目標:依賴>
gcc -o $@ $^ <規則>
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
Makefile缺省規則:
..c.o: -- 表示全部的 .o文件都是依賴與相應的.c文件的.例如mytool.o依賴於mytool.c
eg:
# 這是上面那個程序的Makefile文件 <註釋>
main:main.o mytool1.o mytool2.o <目標:依賴>
gcc -o $@ $^ <規則>
..c.o:
gcc -c $<
make
簡化編譯時所須要下達的指令;
若在編譯完成以後,修改了某個原始碼檔案,則 make 僅會針對被修改了的檔案進行編譯,其它的 object file 不會被更動; 最後能夠依照相依性來更新( update )執行檔。
gcc 編譯器
gcc -o 輸出可執行文件
gcc -c 輸出目標代碼,執行該命令不會生成可執行文件,gcc -Wall -c, -Wall 爲產生更詳細的編譯過程信息。上面的訊息爲警告訊息,
gcc -O -c 在編譯的時候,依據做業環境給予最佳化執行速度
gcc -g 編譯的時候提供對程序進行調試的信息.
gcc -o -lm 編譯時鏈接libm-開頭的庫,(去掉前面的lib和後面的版本標誌,就剩 下m了因此是 -lm)。
-l 是『加入某個函式庫(library)』的意思。
m 則是 libm.so 這個函式庫。
gcc -o -L/home/hoyt/mylib -L指定連接庫的路徑,系統的缺省庫的路徑/lib /usr/lib /usr/local/lib 在這三個路徑下面 的庫,咱們能夠不指定路徑.
eg:要加入包含sin的函數庫libm.so, gcc -o -lm -L/lib -L/usr/lib -L/usr/local/lib
關於第一行的include文件:
第一行『 #include <stdio.h>』,這行說的是要將一些定義數據由 stdio.h 這個檔案讀入,這包括 printf 的相關設定。這個檔案實際上是放置在 /usr/include/stdio.h 的!那麼萬一這個檔案並不是放置在這裏呢?那麼咱們就可使用底下的方式來定義出要讀取的 include 檔案放置的目錄: gcc sin.c -lm -I/usr/include -I/path 後面接的路徑( Path )就是設定要去搜尋相關的 include 檔案的目錄啦!不過,一樣的,默認值是放置在 /usr/include 底下,除非您的 include 檔案放置在其它路徑,不然也能夠略過這個項目!