当前位置: 技术问答>linux和unix
请教Makefile 问题************************************************
来源: 互联网 发布时间:2016-02-08
本文导语: -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~ 然后...
-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 $
Makefile
SOURCE = src2.c
OBJ2 = $(SOURCE:%.c=%.o)
$(OBJ2):$(SOURCE)
$(CC) -o $@ -c $
Makefile这一个Makefile就可以满足:
SOURCE = main.c ./src1/src1.c ./src2/src2.c
OBJ = $(SOURCE:%.c=%.o)
all:$(OBJ)
gcc -o $@ $(OBJ)
%.o:%.c
gcc -c $
|----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 $
Makefile
SOURCE = src2.c
OBJ2 = $(SOURCE:%.c=%.o)
$(OBJ2):$(SOURCE)
$(CC) -o $@ -c $
Makefile这一个Makefile就可以满足:
SOURCE = main.c ./src1/src1.c ./src2/src2.c
OBJ = $(SOURCE:%.c=%.o)
all:$(OBJ)
gcc -o $@ $(OBJ)
%.o:%.c
gcc -c $