有目录结构如下:
mmap
├── Makefile
├── read
│ ├── Makefile
│ └── mmap_read.c
└── write
├── Makefile
└── mmap_write.c
mmap 目录下面有 write 和 read 两个目录,mmap 目录下有一个 Makefile,两个子目录下各有一个 Makefile。
mmap 目录下 Makefile 内容如下:(下面的 \$$ 应当为 两个 $)
DIRS = write read
all: subdirs
.PHONY: subdirs clean
subdirs: $(DIRS)
@for dir in $(DIRS); do [ ! -d \$$dir ] || make -C \$$dir || exit 1; done
clean:
@echo $(DIRS)
@for dir in $(DIRS); do [ ! -d \$$dir ] || make -C \$$dir clean || exit 1; done
mmap/write 目录下 Makefile 内容如下:
CC = gcc
LINK = gcc
CFLAGS = -g -pipe -Wall -Werror -Wextra -Wshadow
LIBS =
SOURCES = $(wildcard *.c)
OBJECTS = $(patsubst %.c, %.o, $(SOURCES))
TARGET = mmap_write
first: all
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LINK) $(CFLAGS) $(LIBS) -o ../$(TARGET) $(OBJECTS)
.PHONY: clean
clean:
rm -f $(OBJECTS) $(TARGET)
mmap/read 目录下 Makefile 内容如下:
CC = gcc
LINK = gcc
CFLAGS = -g -pipe -Wall -Werror -Wextra -Wshadow
LIBS =
SOURCES = $(wildcard *.c)
OBJECTS = $(patsubst %.c, %.o, $(SOURCES))
TARGET = mmap_read
first: all
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LINK) $(CFLAGS) $(LIBS) -o ../$(TARGET) $(OBJECTS)
.PHONY: clean
clean:
rm -f $(OBJECTS) $(TARGET)