程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用gcc去編譯c程序

用gcc去編譯c程序

編輯:關於C語言

編譯的時候首先要進入到你的c文件所在的那個目錄,不然找不到原文件,通過ls命令可以察看當前目錄下的文件

一:編譯單C文件
gcc text.c  會默認產生a.out文件,即默認的目標代碼文件
gcc    -c  text.c   會產生和源文件同名的目標文件即:text.o
gcc    text.c  -o   liu     產生名為liu的可執行文件    或者  gcc   -o   liu   text.c     ./liu就可以執行程序了

 


 二:用到非系統默認類庫

比如用到多線程類庫pthread
gcc   text.c -o  liu  -lpthread   或者gcc  -o  liu   text.c  -lpthread     -lpthread一定放在最後面,即,在-l後面加上你要用到的類庫


三:多個源文件進行編譯,即 makefile 的編寫或者Makefile
makefile的好處是防止源文件的重復編譯

比如有好多個源文件,某天對其中一個源文件進行修改,如果不寫makefile的話,需要將整個工程的所有文件重新編譯一遍,非常麻煩,有了makefile,說明了每個源文件的依附關系,當某個源文件改變的時候只需重新編譯一下關聯的源文件就好。

例如:有以下文件

one.h

one.c

two.h

two.c

main.c

main.c 中引入one.h 和two.h兩個頭文件,one.c two.c 分別實現兩個頭文件中定義的函數

有兩種方式編譯運行該程序,


一:手動單獨編譯

gcc -c one.c

gcc -c two.c

gcc -c main.c

gcc -o main main.o one.o two.o

./main

二:makefile

那麼只需在任何一個文本編輯器裡面寫下如下命令,並保存為makefile

main:main.o one.o two.o

tab鍵gcc(或者cc)-o main main.o one.o two.o

main.o:main.c one.h two.h

tab鍵gcc(或者cc)-c main.c

one.o:one.c one.h

tab鍵gcc(或者cc)-c one.c

two.o:two.c two.h

tab鍵gcc(或者cc)-c two.c

這些源文件都需要在同一個目錄下,並且在main.c中引入one.h 和two.h的時候要用"one.h"  "two.h"不要用<>否則編譯器會到系統類庫文件中去找,是找不到的。

然後在同一目錄的終端下,輸入make命令,那麼編譯就開始了,沒有什麼錯誤的話,執行./main就可以讓你的程序跑起來了。

還可以對makefile進行精簡:

首先有三個符號:

1 $@    代表目標文件

2 $<     代表第一個文件

3$^      代表所有依賴文件

所以上面命令可以精簡為:

main:main.o one.o two.o

tab鍵gcc(或者cc)-o $@ $^

main.o:main.c one.h two.h

tab鍵gcc(或者cc)-c $<

one.o:one.c one.h

tab鍵gcc(或者cc)-c $<

two.o:two.c two.h

tab鍵gcc(或者cc)-c $<

以上makefile還可以精簡:

一個新的符號:.c.o

該符號自動搜索相關聯的源文件和頭文件

於是makefile還可以寫為:
main:main.o one.o two.o

tab鍵gcc(或者cc)-o $@ $^

.c.o:
tab鍵gcc(或者cc) $<

最好在加上clean命令,將生成的目標文件和執行文件刪除,遵守優雅簡潔原則,呵呵,方便再次編譯

clean:

ab鍵gcc(或者cc)rm main main.o one.o two.o

makefile的格式大家要記住了,至於問什麼這樣寫,只能說這是標准,makefile還有很多高深的用法,以後在逐漸去學習。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved