多檔案編譯

2021-09-30 11:27:02 字數 1821 閱讀 4967

一. 常用編譯命令選項

假設源程式檔名為test.c。

3. 選項 -e

用法:#gcc -e test.c -o test.i

作用:將test.c預處理輸出test.i檔案。

4. 選項 -s

用法:#gcc -s test.i

作用:將預處理輸出檔案test.i彙編成test.s檔案。

5. 選項 -c

用法:#gcc -c test.s

作用:將彙編輸出檔案test.s編譯輸出test.o檔案。

7. 選項-o

用法:#gcc -o1 test.c -o test

作用:使用編譯優化級別1編譯程式。級別為1~3,級別越大優化效果越好,但編譯時間越長。

二. 多原始檔的編譯方法

如果有多個原始檔,基本上有兩種編譯方法:

[假設有兩個原始檔為test.c和testfun.c]

2. 分別編譯各個原始檔,之後對編譯後輸出的目標檔案鏈結。

用法:#gcc -c testfun.c //將testfun.c編譯成testfun.o

#gcc -c test.c //將test.c編譯成test.o

#gcc -o testfun.o test.o -o test //將testfun.o和test.o鏈結成test

以上兩種方法相比較,第一中方法編譯時需要所有檔案重新編譯,而第二種方法可以只重新編譯修改的檔案,未修改的檔案不用重新編譯。

3. 如果要編譯的檔案都在同乙個目錄下,可以用萬用字元gcc *.c -o 來進行編譯。

你是否會問,如果是乙個專案的話,可能會有上百個檔案,這樣的編譯法,人不是要累死在電腦前嗎,或者等到你編譯成功了,豈不是頭髮都白了,呵呵,所以我們要把上述的編譯過程寫進以下乙個文字檔案中:

linux下稱之為makefile

#這裡可以寫一些檔案的說明

myfirst: myfirst.o hello.o

g++ myfirst.o hello.o -o myfirst

hello.o:hello.cpp

g++ -c hello.cpp -o hello.o

myfirst.o:myfirst.cpp

g++ -c myfirst.cpp -o myfirst.o

makefile 編寫規則:

(1)以「#」開始的行為注釋

(2)檔案依賴關係為:

target:components

rule

存檔為myfirst,在終端輸入:make myfist,程式出現了錯誤可是所有程式設計師共同的敵人,在編寫程式時我們應該盡量的去避免錯誤的出現,不過編寫的時候再怎麼都不可避免的出現這樣那樣的錯誤,對程式進行必要的除錯是乙個好主意,那我們怎麼來除錯程式呢,看下面:

gdb ./檔名 在這裡我修改下要想下面可以除錯,在上面編譯的 時候必須加上引數g,g++ -g hello.cpp -o hello

以下為除錯狀態下的可以用到的命令(可以僅輸入單詞的輸入,如break可簡為b),尖括號中為說明

list 《顯示源**》

break 行號 《設定斷點》

run 《執行程式》

continue 《繼續從斷點處執行》

print 變數 《除錯時檢視變數的值》

del 行號 《刪除斷點》

step 《單步執行,可跟蹤到函式內部》

next 《單步執行,不可跟蹤到函式內部》

quit 《退出》

makefile 的編寫不是件容易的事情,因為自己寫的makefile可能不能在所有的unix/linux類作業系統下通用。因此在很多專案中都用automake.autoconf或者是cmake等工具。

多檔案編譯

編譯多個檔案 編輯兩個檔案 cs 和 class.cs cs using system namespace test class.cs using system namespace test public void saysomething 執行的命令 引數的使用都和單個檔案的執行一樣 如果不指定生...

gcc(g 多檔案編譯

1.簡單程式 單模組程式 的編譯 檔案file1.c include int main 檔案file1.cpp include using std cout using std endl int main xiaochen freeware gcc file1.c o file1 xiaochen ...

《關於多檔案編譯》

下邊分享一下我自己對多檔案的理解 include 包含檔名 或 include 包含檔名 兩種格式的區別僅在於 使用雙引號 系統首先到當前目錄下查詢被包含檔案,如果沒找到,再到系統指定的 包含檔案目錄 由使用者在配置環境時設定 去查詢。使用尖括號 直接到系統指定的 包含檔案目錄 去查詢。一般地說,使...