Linux开发工具之Makefile(下)

来源:互联网 发布:淘宝上的shockabsorber 编辑:程序博客网 时间:2024/05/17 01:55
二、Makefile(下)
01.make常用内嵌函数
函数调用
  $(function arguments)
$(wildcard PATTERN)
  当前目录下匹配模式的文件
  例如:src=$(wildcard *.c)
$(patsubst PATTERN,REPLACEMENT,TEXT)
  模式替换函数
  例如:$(patsubst %.c,%.o,$src)
  等价于$(src:.c=.o)
shell函数
  执行色狼来了命令
  例如:$(shell ls -d */)
#ls
Makefile
02.多级目录Makefile
#touch main.c
#mkdir bll(应用逻辑层)
#mkdir ui(界面层)
#mkdir dal(数据逻辑层)
#cd ui
#touch ui.h ui.c
#cd ..
#cd dll
#touch dal.h dal.c
#cd ..
#cd bll
#touch bll.h bll.c
#ls
bll dll Makefile ui
#vi Makefile (有二级目录)
CC= gcc
CFLAGS=-Wall -g
BIN= main
SUBDIR= $(shell ls -d */)(当前目录下的所有文件夹)
ROOTSRC= $(wildcard *.c)(当前目录下的所有*.c文件)
ROOTOBJ= $(ROOTSRC:%.c=%.o)
SUBSRC= $(shell find $(SUBDIR) -name '*.c')
SUBOBJ= $(SUBSRC:%.c=%.o)
$(BIN):$(ROOTOBJ) $(SUBOBJ)
$(CC) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ)
.c.o:
$(CC) $(CFLAGS) -o $< -o $@
clean:
rm -f $(BIN) $(ROOTOBJ) $(SUBOBJ)
#ls -d */(列出该目录下的文件夹都列出来)
#find bll dll ui -name '*.c'
bll/bll.c
dll/dll.c
ui/ui.c
#make
#makeclean
#ls
03.Makefile可能生成多个可执行文件,如何只生成一个可执行文件
#vi Makefile
SUBDIRS = test1 test2
.PHONYL:default all clean $(SUBDIRS)
default:all
all clean:
$(MAKE) $(SUBDIRS) TARGET=$@
$(SUBDIRS):
$(MAKE) -C $@ $(TARGET)
#cd . ./test1
#vi Makefile
CC= gcc
BIN= test1
OBJS= test1.o
.PHONY: all clean print
all:print $(BIN)
print @echo "----make all in $(PWD)----"
$(BIN):$(OBJS)
$(CC) $(OBJS) -o $@
%.o:%.c
$(CC) $(OBJS) -o $@
%.o:%.c
$(CC) -c $<
clean:
@echo "---- make clean in $(PWD) ----"
rm -f $(BIN) $(OBJS)
#cd ../test2
#ls
#vi Makefile
CXX= g++(实现C++的编译)
BIN= test2
OBJS= test2.o
CPPFLAGS=-Wall -g
.PHONY: all clean print
all:print $(BIN)
@echo "---- make all in $(PWD) ----"
$(BIN):$(OBJS)
$(CXX) $(OBJS) -o $@
.o:%.cpp
$(CXX) -c $<
clean:
@echo "---- make clean in $(PWD) ----"
rm -f $(BIN) $(OBJS)
如果子目录下存在文件夹,也可以采用与顶层目录的Makefile类似的写法
,实现多级目录,可扩展的方法。
0 0
原创粉丝点击