Linux C相關基礎

系統求助
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 檔案放置在其它路徑,不然也能夠略過這個項目!
相關文章
相關標籤/搜索