Makefile文件書寫

單目標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命令的當前目錄的絕對路徑
$@ 目標文件
$^ 所有依賴的文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章