哪位高手懂makefile,很简单的有关问题

谁懂makefile,很简单的问题
整个只有5个文件
main.c(主文件)
a.h a.c (a源文件及头文件)
b.h b.c (b源文件及头文件)

b里声明和定义了add(int a, int b)这样一个函数(.h里声明,.c里定义)

a.h里#include "b.h"
void test();
a.c里#include "a.h"
void test(){add(1,2);}

main.c里#include "a.h" 调用 test()函数


请问这个Makefile文件怎么写?

还有一种情况,还是这5个文件

a.h里没有#include "b.h"
void test();
a.c里#include "a.h" #include"b.h"
void test(){add(1,2);}

main.c里#include "a.h" 调用 test()函数

这样,Makefile又怎么写?


------解决方案--------------------
别把自己绕进去了。
gcc -o main *.c即可

------解决方案--------------------
main: main.o a.o b.o
gcc -o main main.o a.o
main.o: main.c a.h
gcc -c main.c
a.o: a.c a.h b.h
gcc -c a.c
b.o: b.c b.h
gcc -c b.c
------解决方案--------------------
引用:
引用:别把自己绕进去了。
gcc -o main *.c即可
哇,真的可以啊,什么原理
就相当于编译每个.c文件后再链接;
.c文件里有include包含了头文件,编译时直接找到头文件并展开,编译,链接,就完了
------解决方案--------------------

CC = gcc
CXX = g++
CFLAGS += -Wall -g
SOURCE_FILE = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOUCE_FILES))

%.o : %.c %.h
    $(CC) -c $(CFLAGS) $< -o $@
%.o : %.c
    $(CC) -c $(CFLAGS) $< -o $@
bin: $(OBJS) 
    $(CC) $(OBJS) -o $@  
clean:
    rm *.o -rf
    rm  bin -rf

注意前面的不是空格是tab键 
   可以去我日记里面看那边makefile的文章
------解决方案--------------------

// 量身定做
main:main.o a.o b.o
gcc -o main main.o a.o b.o

main.o:main.c
gcc -c main.c

a.o:a.c
gcc -c a.c

b.o:b.c
gcc -c b.c

clean :
rm -f main.o a.o b.o

------解决方案--------------------

// 为了楼主方便理解,我写了下响应的最简单源文件,仅供参考:
// a.c
#include"a.h"
int aa = AA;
// a.h
#define AA 20

// b.c
#include"b.h"
int bb = BB;
// b.h
#define BB 30

// main.c
#include<stdio.h>
#include"a.h"
#include"b.h"
extern int aa;
extern int bb;
int main()
{
int ii = 10;
printf("ii=%d, aa=%d, bb=%d",ii,aa,bb);

return 1;
}

// makefile
main:main.o a.o b.o
gcc -o main main.o a.o b.o

main.o:main.c
gcc -c main.c

a.o:a.c
gcc -c a.c

b.o:b.c
gcc -c b.c

clean :
rm -f main.o a.o b.o