Makefile 编译整个⽬录包含⼦⽬录下的⽂件
转载⾃别⼈⽂章,忘记出处,原作者看见可以批判
–⽬录结构
wrm@wrm-ruijie:~/test/fuping$ ls
debug demo Makefile porting src
顶层Makefile:
wrm@wrm-ruijie:~/test/fuping$ cat Makefile
#设置编译器
.PHONY:clean all
CC=gcc
INCLUDE_DIR=
C_FLAGS=
#debug⽂件夹⾥的makefile⽂件需要最后执⾏,所以这⾥需要执⾏的⼦⽬录要排除debug⽂件夹,这⾥使⽤awk排除了debug⽂件夹,读取剩下的⽂件夹
SUBDIRS=KaTeX parse error: Expected '}', got 'EOF' at end of input: … ^d | awk '{if($9 != “include”) print KaTeX parse error: Expected 'EOF', got '}' at position 2: 9}') #⽆需下⼀⾏的注释代码,…9 == “debug”) print $KaTeX parse error: Expected 'EOF', got '}' at position 2: 9}') #记住当前⼯程的根⽬录路…(shell pwd)
#最终bin⽂件的名字,可以更改为⾃⼰需要的
BIN=myapp
#⽬标⽂件所在的⽬录
OBJS_DIR=debug/obj
#bin⽂件所在的⽬录
BIN_DIR=debug/bin
#获取当前⽬录下的c⽂件集,放在变量CUR_SOURCE中
CUR_SOURCE=KaTeX parse error: Expected 'EOF', got '#' at position 16: {wildcard *.c} #将对应的c⽂件名转为o⽂件后放…{patsubst %.c, %.o, KaTeX parse error: Expected 'EOF', got '}' at position 13: (CUR_SOURCE)} #将以下变量导出到⼦shel…(SUBDIRS) $(CUR_OBJS) DEBUG
#递归执⾏⼦⽬录下的makefile⽂件,这是递归执⾏的关键
$(SUBDIRS):ECHO
make -C $@
DEBUG:ECHO
#直接去debug⽬录下执⾏makefile⽂件
make -C debug
ECHO:
@echo $(SUBDIRS)
#将c⽂件编译为o⽂件,并放在指定放置⽬标⽂件的⽬录中即OBJS_DIR
$(CUR_OBJS):%.o:%.c
$(CC) -c $^ -o (OBJS_DIR)/$@ -lpthread
clean:
rm -rf $(OBJS_DIR)/.o
rm -rf $(BIN_DIR)/
wrm@wrm-ruijie:~/test/fuping$
—debug ⽬录下的Makefile:
wrm@wrm-ruijie:~/test/fuping/debug$ cat Makefile
OBJS=*.o
ODIR=obj
(BIN_DIR)/(ODIR)/$(OBJS)
$(CC) -o $@ $^
wrm@wrm-ruijie:~/test/fuping/debug$
makefile phony9!="debug ")if ((ROOT IR )/D (ROOT IR )/D (BIN ):
–源码⽬录下的Makefile
wrm@wrm-ruijie:~/test/fuping/src$ cat Makefile
INCLUDE_DIR=-IKaTeX parse error: Expected 'EOF', got '#' at position 34: …lude/ C_FLAGS= #⼦⽬录的Makefile直接读…(shell ls -l | grep ^d | awk '{print $KaTeX parse error: Expected 'EOF', got '}' at position 2: 9}') #以下同根⽬录下的mak…{wildcard *.c}CUR_OBJS=${patsubst %.c, %.o, KaTeX parse error: Expected 'EOF', got '}' at position 13: (CUR_SOURCE)} all:(SUBDIRS)$(CUR_OBJS)
$(SUBDIRS):ECHO
make -C $@
$(CUR_OBJS):%.o:%.c
$(CC) $(INCLUDE_DIR) $(C_FLAGS) -c $^ -o (OBJS_DIR)/$@
ECHO:
@echo $(SUBDIRS)
wrm@wrm-ruijie:~/test/fuping/src$
以上写法要保证每⼀个⽬录下都有⼀个C⽂件,没有的需要建⽴⼀个空的C⽂件(ROOT IR )/D
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论