Makefile中的預定義變量:
- CC,C語言編譯器的名稱,cc
- CPP, C語言預處理器的名稱,$(CC) -E
- CXX, C++語言的編譯器名稱,g++
- RM,刪除文件程序的名稱,rm -f
- CFLAGS, C語言編譯器的編譯選項,無默認值
- CPPFLAGS,C語言預處理器的編譯選項,無默認值
- CXXFLAGS,C++語言編譯器的編譯選項,無默認值
注:在使用RM時,一般使用如下語句: -$(RM) $(TARGET) $(OBJS), 符號“-”表示在操作失敗時不報錯,而是繼續執行。例如在不存在TARGET時將繼續刪除OBJS。
Makefile中的自動變量:
- $*, 表示目標文件的名稱,不包含擴展名
- $@, 表示目標文件的名稱,包含擴展名
- $+, 表示所有的依賴文件,以空格隔開,可能含有重復的文件
- $^, 表示所有的依賴文件,以空格隔開,不重復
- $<, 表示依賴性中第一個依賴文件的名稱
- $?, 依賴項中,所有比目標文件新的依賴文件
搜索路徑:
聲明偽目標:
Makefile中的函數:
- wildcard, 用法$(wildcard PATTERN), 查找當前目錄下所有符合PATTERN的文件,返回文件名,用空格隔開,如$(wildcard *.c)
- patsubst, 用法$(patsubst PATTERN,REPLACEMENT,SOURCE), 查找SOURCE中符合PATTERN的單詞,用REPLACEMENT規則替換,注意,要使用%通配符表示0到n個字符。例:$(patsubst %.c, %.o, $(wildcard *.c))
- foreach,一般用於多目錄下文件的遍歷。用法$(foreach VAR,LIST,TEXT), 將LIST字符串中一個空格分隔的單詞,先傳給VAR,再執行TEXT的表達式,TEXT表達式的返回值作為整個foreach的返回值。