makefile學習筆記 書寫規則 偽目標

2021-08-19 16:11:18 字數 1489 閱讀 8528

20180416 makefile學習筆記-書寫規則(偽目標)

下面的例子中的乙個「clean」的目標,就是乙個「偽目標」:

clean:

rm *.o temp

clean的作用是當我們生成了許多編譯檔案時,我們應該提供乙個清楚他們的「目標」以備完整地重編譯而用(以「make clean」來使用該目標)。

因為,我們並不生成「clean」這個檔案,「偽目標」並不是乙個檔案,只是乙個標籤,由於「偽命令」不是檔案,所以make無法生成它的依賴關係和決定它是否執行,我們只是通過顯示地指明這個「目標」才能讓其生效,當然,「偽目標」的取名不能和檔名重名,不然其就失去了「偽目標」的意義了。

當然,為了避免和檔案重名的這種情況,我們可以使用乙個特殊的標記「.phony」來顯示地指明乙個目標是「偽目標」,向make說明,不管是否有這個檔案,這個目標就是「偽目標」。

.phony:clean

只要有這個宣告,不管是否有「clean」檔案,要執行「clean」這個目標,只有「make clean」這樣,於是整個過程可以寫成:

.phony:clean

clean:

rm *.o temp

「偽目標」一般沒有依賴檔案,但是,我們也可以為偽命令指定所依賴的檔案,偽目標同樣可以作為「預設目標」,只要將其放在第乙個,乙個示例就是,如果你的makefile需要一口氣生成若干個可執行檔案,但你只想簡單地敲一下make完事,並且所有的目標檔案都寫在乙個makefile裡,那麼你可以使用偽命令這個特性:

all:prog1 prog2 prog3

.phony:all

prog2:prog2.o utils.o

cc -o prog2 prog2.o 

prog3:prog3.o utils.o

cc -o prog3 prog3.o sort.o utils.o

prog1:prog1.o utils.o

cc -o prog1 prog1.o utils.o

我們知道,makefile中的第乙個目標會被作為其預設目標,我們宣告了乙個「all」的偽目標,其依賴於其他三個目標。由於偽目標的特性是 總被執行。所以其依賴的那三個目標的規則總是會被決議。也就達到了我們一口氣生成多個目標的目的。「.phony:all」宣告了「all」這個目標為偽目標。

另外,從上面的例子可以看出,目標也可以成為依賴,所以,偽目標同樣同樣也可以成為依賴,看下面的例子:

.phony:cleanall cleanobj cleandiff

cleanall:cleanobj cleandiff

rm program

cleanobj:

rm *.o

cleandiff:

rm *.diff

「make clean」將清除所有要被清除的檔案,「cleanobj」和「cleandiff」這兩個偽目標有點像「子程式」的意思。我們可以輸入「make cleanall」、「make cleanobj」和「make cleandiff」命令來達到清除不同種類檔案的目的。

makefile學習筆記 書寫規則 規則舉例

20180413 makefile學習筆記 書寫規則 規則舉例 規則包含兩個部分,乙個是依賴關係,乙個是生成目標的方法。在makefile中,規則的順序是很重要的,因為,makefile中只應該有乙個最終目標,其他的目標都是被這個目標所連帶出來的,所以一定要讓make知道你的最終目標是什麼。一般來說...

makefile學習筆記 makefile概述

20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...

Makefile學習筆記

makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...