單目標Makefile
CXX=g++ #定義編譯工具
TARGET=test #定義編譯目標
INCLUDES= #定義依賴的頭文件
COMMSRCS=*.cpp
SRCS=main.cpp \
COMMSRCS
OBJECTS=$(SRCS:.cpp=.o)
LDFLAGS= #定義鏈接選項
LIBS= #定義依賴的動態庫
CXXFLAGS= #定義編譯選項
OUTPUT= #定義目標輸出目錄
.PHONY : all
all:$(TARGET)
$(TARGET):$(OBJECTS)
$(CXX) $^ $(LIBS) -o $(OUTPUT)/$@
.PHONY : clean
clean:
rm -rf $(OUTPUT)/$(TARGET) $(OBJECT)
遞歸Makefile
方法一:
subsystem:
cd subdir && $(MAKE)
方法二:
subsystem:
$(MAKE) -C subdir
eg:
#main
.PHONY : test
test:
@echo "main makelevel = $(MAKELEVEL)"
@$(MAKE) -C subdir1 test
@$(MAKE) -C subdir2 test
#subdir1
.PHONY : test
test:
@echo "subdir1 makedevel = $(MAKELEVEL)"
@$(MAKE) -C subdir11 test
#subdir11
.PHONY : test
test:
@echo "subdir11 makedevel = $(MAKELEVEL)"
#subdir2
.PHONY : test
test:
@echo "subdir2 makedevel = $(MAKELEVEL)"
關鍵變量
Name |
Note |
MAKE |
Makefile文件中MAKE等價於make |
MAKELEVEL |
遞歸調用深度 |
CURDIR |
執行make命令的當前目錄的絕對路徑 |
$@ |
目標文件 |
$^ |
所有依賴的文件 |