//a.h,包含頭文件stdio.h,并且定義一個函數print
#include<stdio.h>
void print();//b.c,包含頭文件a.h,然后就可以寫print函數的內容了
#include"a.h"
void print(){
printf("who are you\n");
}//c.c,包含頭文件a.h,調用print函數
#include"a.h"
int main(){
print();
return 0;
}
下面是Makefile 固定命名,記住這些文件全部在同一文件夾下,全部編寫完成后,執行make命令就會自動執行Makefile了,
hello:c.o b.o //其中hello是目標文件,c.o和b.o是依賴文件,需要這兩個文件才能生成hello,因為現在還沒有c.o文件,所以跳到c.o:c.c a.h那里,然后執行gcc -c c.c 執行完成后又返回該條語句,發現也沒有b.o,所以跳到b.o:b.c a.hgcc -o hello c.o b.o //這個是shell命令
c.o:c.c a.hgcc -c c.c //其中gcc -c c.c是指編譯生產c.o(改成gcc -o c.o c.c會報錯)
b.o:b.c a.hgcc -c b.c
clean: //執行make clean會執行下面的語句rm hello c.o b.o
執行效果如下
[root@bogon bp]# ls
a.h b.c c.c Makefile
[root@bogon bp]# make
gcc -c c.c
gcc -c b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h b.c b.o c.c c.o hello Makefile
[root@bogon bp]# ./hello
who are you
改進后的方法,只需要修改Makefile
[root@bogon bp]# cat Makefile
objects=c.o b.o 相當于C語言的宏定義變量
hello:c.o b.ogcc -o hello $(objects)
c.o:c.c a.hgcc -c c.c
b.o:b.c a.hgcc -c b.c
clean:rm hello $(objects)
我們還能更精簡這個過程,也是只修改Makefile
[root@bogon bp]# make
cc -c -o c.o c.c
cc -c -o b.o b.c
gcc -o hello c.o b.o
[root@bogon bp]# ls
a.h b.c b.o c.c c.o hello Makefile
[root@bogon bp]# ./hello
who are you
[root@bogon bp]# cat Makefile
objects=c.o b.o
hello:c.o b.ogcc -o hello $(objects)
$(bojects):a.h 因為c.o和b.o都依賴a.h
c.o:c.c 可以省略掉gcc
b.o:b.c
clean:rm hello $(objects)
[root@bogon bp]#
上面是我自己總結寫的,原文如下http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html
進行內核編譯的時候make會多兩個選項,-C和-M.
其中-C $(KDIR) 指明跳轉到內核源碼目錄下讀取那里的Makefile;M=$(PWD) 表明然后返回到當前目錄繼續讀入、執行當前的Makefile。