【发布时间】:2013-12-07 10:54:03
【问题描述】:
我尝试编写一个 makefile,它在当前目录中搜索 lib 目录,编译每个目录的源代码并将目标文件放入单独的目标目录中。我不想拥有多个 makefile。
这个 makefile 会这样做:
SRCDIR := $(shell ls -d lib_*/)
CC := gcc
DB := gdb
OBJDIR := obj
CFLAGS := -Wall -Werror -Wextra -pedantic -O3
LDFLAGS := #
# Rules
all:
@ # create object directory
@mkdir -p $(OBJDIR)/ ;
@ # go through all source dirs
@for dir in $(SRCDIR); do \
echo $$dir && \
cd $$dir && \
for n in $$(ls *.c); do \
m=$${n%%.c}; \
$(CC) -c \
$(CFLAGS) \
$(LDFLAGS) \
-o ../$(OBJDIR)/$$m.o $$n;\
done; \
cd ..; \
done
但是:makefile 编译每次运行的所有源。来源也没有任何变化。 makefile 是否可以识别是否有更改并仅编译更改的源?
这里是目录结构:
lib
|-lib_one
| |-lib_one.c
| |-lib_one.h
|
|-lib_two
| |-lib_two.c
| |-lib_two.h
|
|-lib_n
| |-lib_n.c
| |-lib_n.h
|
|-obj
| |-lib_one.o
| |-lib_two.o
| |-
| |-lib_n.o
|
|-makefile
【问题讨论】: