请教Makefile 问题************************************************
-dir
|----main.c Makeifle
----subdir1
|-----src1.c src1.h Makefile
----subdir2
|-----src2.c src2.h Makefile
目录dir下有两个子目录subdir1,subdir2~
我想实现的效果:
a.
在subdir1下生成src1.o~ 在subdir2下生成src2.o~
然后让总的makefile将main.o src1.o src2.o 连接生成 main 可执行文件~
b.
当修改任何一个.c文件后~再重新make时~能够自动推导出哪个文件被修改了~
而不需要重新编译所有的文件~
目前我已经完成了a, 但b总是搞不好~ 下面是我写的~ 麻烦大家帮我想想 ~ 先谢过~
---------------------
dir->Makefile:
SOURCE = main.c ./src1/src1.c ./src2/src2.c
OBJ = $(SOURCE:%.c=%.o)
all:$(OBJ)
$(CC) -o $@ $(OBJ)
$(OBJ):$(SOURCE)
make -C ./src1/
make -C ./src2/
$(CC) -o main.o -c main.c
---------------------
subdir1->Makefile
SOURCE = src1.c
OBJ1 = $(SOURCE:%.c=%.o)
$(OBJ1):$(SOURCE)
$(CC) -o $@ -c $<
---------------------
subdir2->Makefile
SOURCE = src2.c
OBJ2 = $(SOURCE:%.c=%.o)
$(OBJ2):$(SOURCE)
$(CC) -o $@ -c $<
---------------------
------解决方案--------------------不知道楼主是想测试分级Makefile还是只是想实现a,b两个需求。
如果只是想实现a,b,那么dir- >Makefile这一个Makefile就可以满足:
SOURCE = main.c ./src1/src1.c ./src2/src2.c
OBJ = $(SOURCE:%.c=%.o)
all:$(OBJ)
gcc -o $@ $(OBJ)
%.o:%.c
gcc -c $< -o $@