多级MakeFile的写法

#最外层的makefile负责进入每个子目录去make

PWD  := $(shell pwd)
SUBDIRS = algorithms main

.PHONY:all
all:
	@list='$(SUBDIRS)';for subdir in $$list; do \
		make -C $$subdir M=$(PWD); \
	done
.PHONY:clean
clean:
	@list='$(SUBDIRS)'; for subdir in $$list; do \
		make -C $$subdir M=$(PWD) clean;\
	done
	rm -f ./target/*

 

######### Makefile MLD ########  
EXTENSION = c
CC = gcc
SUBDIR = src
OBJ = obj
DEP = dep
#CXXFLAGS:编译选项, LDFLAGS:链接选项  
CXXFLAGS += -I /home/kouwq/Makefile/binary_search_mul/algorithms/include
#LDFLAGS +=

CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.$(EXTENSION)))
CXX_OBJECTS=$(patsubst  %.$(EXTENSION), ${OBJ}/%.o, $(notdir $(CXX_SOURCES)))
DEP_FILES  =$(patsubst  %.$(EXTENSION), ${DEP}/%.d, $(notdir $(CXX_SOURCES)))

.PHONY:all
all: $(CXX_OBJECTS)

${OBJ}/%.o: ${SUBDIR}/%.$(EXTENSION)
	$(CC)  -c $(CXXFLAGS)  $<  -o  $@

${DEP}/%.d: ${SUBDIR}/%.$(EXTENSION)
	$(CC) $(CXXFLAGS) -MM $< | sed -e 1's,^,$(OBJ)/,' > $@

ifneq "$(MAKECMDGOALS)" "clean"
-include $(DEP_FILES)
endif

.PHONY:clean
clean:
	-rm  -f  $(CXX_OBJECTS)  $(DEP_FILES)

 

######### Makefile MLD ########  
EXTENSION = c
CC = gcc
EXE = ../target/main
SUBDIR = src
OBJ = ./obj
DEP = ./dep

SUBDIR_A = ../algorithms/src
OBJ_A = ../algorithms/obj


#CXXFLAGS:编译选项, LDFLAGS:链接选项  
CXXFLAGS += -I /home/kouwq/Makefile/binary_search_mul/algorithms/include
#LDFLAGS +=

CXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.$(EXTENSION)))
CXX_OBJECTS=$(patsubst  %.$(EXTENSION), ${OBJ}/%.o, $(notdir $(CXX_SOURCES)))
DEP_FILES  =$(patsubst  %.$(EXTENSION), ${DEP}/%.d, $(notdir $(CXX_SOURCES)))

CXX_SOURCES_A =$(foreach dir,$(SUBDIR_A), $(wildcard $(dir)/*.$(EXTENSION)))
CXX_OBJECTS_A=$(patsubst  %.$(EXTENSION), ${OBJ_A}/%.o, $(notdir $(CXX_SOURCES_A)))

CXX_OBJECTS_T=$(CXX_OBJECTS) $(CXX_OBJECTS_A)

$(EXE): $(CXX_OBJECTS_T)
	$(CC)  $(CXX_OBJECTS_T) -o $(EXE)

${OBJ}/%.o: ${SUBDIR}/%.$(EXTENSION)
	$(CC)  -c $(CXXFLAGS)  $<  -o  $@

${DEP}/%.d: ${SUBDIR}/%.$(EXTENSION)
	$(CC) $(CXXFLAGS) -MM $< | sed -e 1's,^,$(OBJ)/,' > $@

ifneq "$(MAKECMDGOALS)" "clean"
-include $(DEP_FILES)
endif

.PHONY:clean
clean:
	rm  -f  $(CXX_OBJECTS)  $(DEP_FILES)

github路径(点我下载源码)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值