【C++ Makefile #3】Makefile 常用變數 -「$@」, 「$^」

前言

今天我們要來繼續討論 Makefile,
我們來學習 Makefile 的常用變數 -「$@」, 「$^」

(使用時請輸入小寫,這邊因為會吃到語法,所以改用全形大寫。)

我們的今天的 Makefile

這份檔案與上次的 Makefile 「功能」是完全相同的,
而我們要注意的是兩者不同的地方,「關於一些重複字詞的優化」。

RM=rm
T=touch

otherfiles = myfile myotherfile
buildfiles = myfile2

all: $(buildfiles)

myfile:
    $(T) $@

myotherfile: # @ = echo to target
    $(T) $@ 

myfile2: $(otherfiles) # ^ = all dependency
    cat $^ > $@


clean:
    $(RM) $(buildfiles)
    $(RM) $(otherfiles)

說明 - 「$@」, 「$^」

與 day2 不同的是,這邊多使用了兩種特別的符號「$@」, 「$^」

「$@」, 「$^」是在 Makefile 裡面常見的符號,
我們可以透過這兩者分別取代以下說明的內容:

  • 「$@」:取代 target 名稱,因為我們時常會讓 target 等同於要製作出的檔名,我們就會使用「$@」代替
  • 「$^」:取代參數,這邊在 myfile2 為 target 時使用, 我們使用 「$^」代替了「$(otherfiles)」,這很像是我們一般寫程式碼時,引入變數的感覺, 我們就是使用這個符號,達到輸入變數的效果。
  • 此外,在其他多參數的時候,「^」取代的是全部的 dependency,也就是所有做為參數的都會被參考到。

    Reference