Makefile生成多個目標文件

有目錄結構如下:

 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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章