make常用内嵌函数

学习 笔记

  • 函数调用
$(function arguments)
  • $(wildcard PATTERN)
    当前目录下匹配模式的文件
    例如:src=$(wildcard *.c)

  • $(patsubst PATTERN,REPLACEMENT,TEXT)
    模式替换函数
    例如:$(patsubst %.c,%.o,$src)
    等价于$(src:.c=.o)

  • shell函数
    执行shell命令
    例如:$(shell ls -l)

二级目录编译链接

.PHONY:clean 
CC           = gcc
CFLAGS       = -Wall -g
BIN          = main
SUBDIR       = $(shell ls -d */)
ROOTSRC      = $(wildcard *.c)
ROOTOBJ      = $(ROOTSRC:%.c=%.o)
SUBSRC       = $(shell find $(SUBDIR) -name '*.c')
SUBOBJ       = $(SUBSRC:%.c=%.o)

$(BIN):$(ROOTSRC) $(SUBOBJ)
    $(CC) $(CFLAGS) -c -o $(BIN) $(ROOTOBJ) $(SUBOBJ)
%.o:%.c
    $(CC) $(CFLAGS) -c $< -o $@
clean:
    rm -f  $(BIN) $(ROOTOBJ) $(SUBOBJ)
  • 多级目录Makefile
    父目录
 SUBDIRS       = test1 test2
.PHONY:default all clean $(SUBDIRS) 
default:all
all clean:
    $(MAKE) $(SUBDIRS) TARGET=$@
$(SUBDIRS):
    $(MAKE) -C $@ $(TARGET)

test1/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) -c $<
clean:
    @echo "----make clean in $(PWD) ----"
    rm -f $(BIN) $(OBJS)

test2/Makefile

CXX = g++
BIN = test2
OBJS = test2.o
.PHONY: all clean print
all:print $(BIN)
print:
    @echo "----make all in $(PWD) ----"
$(BIN):$(OBJS)
    $(CXX) $(OBJS) -o $@
%.o:%.cpp
    $(CXX) -c $<
clean:
    @echo "----make clean in $(PWD) ----"
    rm -f $(BIN) $(OBJS)
发布了31 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/my_flash/article/details/80471854