makefile基本語法

2022-09-09 12:21:10 字數 2099 閱讀 1124

main.c為主體,input.c負責接收從鍵盤輸入的數值,calcu.h進行任意兩個數相加

這裡面當**特別多的時候

gcc main.c input.c calcu.c -o main

這行**就比較長

有一種辦法是分別把main,input, calcu編譯成點o檔案,然後再gcc連線

gcc -c main.c

gcc -c input.c

gcc -c calcu.c

gcc main.o input.o calcu.o - o main

這樣以後只要我修改了calcu.c, 只需要gcc -c calcu.c,然後再鏈結,節省了時間

但是這樣編譯的**量增大了,所以採用了makefile

基本語法

目標:依賴集合

命令1命令2

(命令列表中每條命令必須以tab鍵開始, 不能用空格)

預設的第乙個目標就是終極目標

makefile變數的使用

# 變數使用

不加@就會把所執行的命令列印出來的

注意此時輸出的是shaozheming,=號的值取決於name的值,加上:=就不會這個問題

?=:如果前面賦值了就用前面的值, 沒有賦值就用?=後面的值

+=:類似字串拼接

makefile模式規則

類似萬用字元的規則

%.o : %.c

自動化變數

上面的萬用字元規則雖然大大減少了**量,但是在

gcc -c main.c 這裡面的main不能換成%

常用的幾種:

$@ : 規則中的目標集合,如果有多個目標,表示匹配模式中定義的目標集合

$< : 依賴檔案集合的第乙個檔案,如果依賴檔案是以%定義的,那麼這個就是符合模式的一系列檔案集合

$^ : 所有依賴檔案集合,使用空格分開。如果在依賴檔案中有多個重複檔案,他會去除重複檔案,只保留乙份

偽目標

偽目標是為了避免makefile中定義的只執行命令的目標和工作目錄下的市級檔案出現名字衝突,比如clean,這個就是只執行下面的命令而不是生成檔案,因此工作目錄下永遠不會存在檔案clean,所以屬於make clean,這個命令一定執行。但當我們手賤在工程目錄下建立乙個clean檔案,規則因為沒有依賴檔案,所以這個clean檔案是最新的,那後面的rm命令也不會執行。為避免這個問題,可以將clean宣告為偽目標。宣告方式為:

.phony : clean

Makefile 入門與基本語法

在我看來,學會寫簡單的makefile,閱讀較複雜的makefile,是每乙個linux程式設計師都必須擁有的基本素質。makefile可以自動識別哪些原始檔被更改過,需要重新編譯,那些不需要。從而節省大型工程重新編譯的時間。規則如下 如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。如...

makefile語法 Makefile的語法

假如乙個目標檔案所依賴的依賴檔案很多,我們豈不是要寫很多規則?這顯然不合乎常理。我們可以使用萬用字元解決這些問題。我們對上節程式進行修改 如下 test a.o b.o gcc o test o c gcc c o o 表示所用的.o檔案 c 表示所有的.c檔案 表示目標 表示所有依賴檔案 在該目錄...

makefile語法示例

edit main.o kbd.o cc o edit main.o kdb.o main.o main.c defs.h cc c main.c kbd.o kbd.c defs.h command.h cc c kbd.c clean rm o edit makefile中使用變數 object...