日期:2014-05-16  浏览次数:20645 次

请教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 $@