下一篇: DESTDIR, 上一篇: Makefile 中的工具程式, 上層: Makefile 慣例 [目錄][索引]
Makefile 應提供變數來覆寫特定的命令、選項等等。
特別是,您應該透過變數來執行大多數的工具程式。因此,如果您使用 Bison,請建立一個名為 BISON
的變數,其預設值設定為 ‘BISON = bison’,並且在您需要使用 Bison 時,使用 $(BISON)
來引用它。
檔案管理工具程式,例如 ln
、rm
、mv
等等,不需要以這種方式透過變數來引用,因為使用者不需要將它們替換成其他程式。
每個程式名稱變數都應該帶有一個選項變數,用於為程式提供選項。在程式名稱變數名稱後附加 ‘FLAGS’ 以取得選項變數名稱—例如,BISONFLAGS
。(C 編譯器的 CFLAGS
、yacc 的 YFLAGS
和 lex 的 LFLAGS
名稱是此規則的例外,但我們保留它們因為它們是標準。)在任何執行前處理器的編譯命令中使用 CPPFLAGS
,在任何執行連結的編譯命令以及任何直接使用 ld
的情況下使用 LDFLAGS
。
如果有些 C 編譯器選項必須用於正確編譯某些檔案,請不要將它們包含在 CFLAGS
中。使用者期望能夠自由地指定 CFLAGS
。相反地,安排將必要的選項獨立於 CFLAGS
傳遞給 C 編譯器,方法是在編譯命令中明確地寫出它們,或是定義一個隱含規則,像這樣
CFLAGS = -g ALL_CFLAGS = -I. $(CFLAGS) .c.o: $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
請將 ‘-g’ 選項包含在 CFLAGS
中,因為這不是正確編譯必要的。您可以將其視為僅建議的預設值。如果套件預設設定為使用 GCC 編譯,那麼您不妨也將 ‘-O’ 包含在 CFLAGS
的預設值中。
將 CFLAGS
放在編譯命令的最後,在包含編譯器選項的其他變數之後,以便使用者可以使用 CFLAGS
來覆寫其他選項。
CFLAGS
應該在每次調用 C 編譯器時使用,無論是執行編譯還是執行連結。
每個 Makefile 都應該定義變數 INSTALL
,它是將檔案安裝到系統的基本命令。
每個 Makefile 也應該定義變數 INSTALL_PROGRAM
和 INSTALL_DATA
。(INSTALL_PROGRAM
的預設值應該是 $(INSTALL)
;INSTALL_DATA
的預設值應該是 ${INSTALL} -m 644
。)然後它應該使用這些變數作為實際安裝的命令,分別用於可執行檔和非可執行檔。這些變數的最小用法如下
$(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
然而,最好在目標檔案上支援 DESTDIR
前綴,這將在下一節中說明。
在一個命令中安裝多個檔案是可以接受的,但不是必需的,最後一個參數是一個目錄,例如
$(INSTALL_PROGRAM) foo bar baz $(bindir)
下一篇: DESTDIR, 上一篇: Makefile 中的工具程式, 上層: Makefile 慣例 [目錄][索引]