Makefile的編寫 假設我們有下面這樣的一個程序,源代碼如下: /* main.c */ #include "mytool1.h" #include "mytool2.h" int main(int argc,char **argv) { mytool1_print("hello"); mytool2_print("hello"); } /* mytool1.h */ #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /* mytool1.c */ #include "mytool1.h" void mytool1_print(char *print_str) { printf("This is mytool1 print %s\n",print_str); } /* mytool2.h */ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif /* mytool2.c */ #include "mytool2.h" void mytool2_print(char *print_str) { printf("This is mytool2 print %s\n",print_str); } ============================================Makefile的文件是: [gping@localhost gp]$ vi Makefile(回車, 編輯器) # 這是上面那個程序的Makefile文件 main:main.o mytool1.o mytool2.o # 下面一行一定要加TAB鍵 gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c [gping@localhost gp]$ make gcc -c main.c gcc -o main main.o mytool1.o mytool2.o [gping@localhost gp]$ ./main This is mytool1 print helloThis is mytool2 print hello1.源程序的編譯 在Linux下面,如果要編譯一個C語言源程序,我們要使用GNU的gcc編譯器. 下面我們以一個實例來說明如何使用gcc編譯器. 假設我們有下面一個非常簡單的源程序(hello.c): int main(int argc,char **argv) { printf("Hello Linux\n"); } 要編譯這個程序,我們只要在命令行下執行: gcc -o hello hello.c gcc 編譯器就會為我們生成一個hello的可執行文件.執行./hello就可以看到程序的輸出結果了.命令行中 gcc表示我們是用gcc來編譯我們的源程序,-o 選項表示我們要求編譯器給我們輸出的可執行文件名為hello 而hello.c是我們的源程序文件. gcc編譯器有許多選項,一般來說我們只要知道其中的幾個就夠了. -o選項我們已經知道了,表示我們要求輸出的可執行文件名. -c選項表示我們只要求編譯器輸出目標代碼,而不必要輸出可執行文件. -g選項表示我們要求編譯器在編譯的時候提供我們以后對程序進行調試的信息. 知道了這三個選項,我們就可以編譯我們自己所寫的簡單的源程序了,如果你想要知道更多的選項,可以查看gcc的幫助文檔,那里有著許多對其它選項的詳細說明. 2.Makefile的編寫 假設我們有下面這樣的一個程序,源代碼如下: /* main.c */ #include "mytool1.h" #include "mytool2.h" int main(int argc,char **argv) { mytool1_print("hello"); mytool2_print("hello"); } /* mytool1.h */ #ifndef _MYTOOL_1_H #define _MYTOOL_1_H void mytool1_print(char *print_str); #endif /* mytool1.c */ #include "mytool1.h" void mytool1_print(char *print_str) { printf("This is mytool1 print %s\n",print_str); } /* mytool2.h */ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif /* mytool2.c */ #include "mytool2.h" void mytool2_print(char *print_str) { printf("This is mytool2 print %s\n",print_str); } 當然由于這個程序是很短的我們可以這樣來編譯 gcc -c main.c gcc -c mytool1.c gcc -c mytool2.c gcc -o main main.o mytool1.o mytool2.o 這樣的話我們也可以產生main程序,而且也不時很麻煩.但是如果我們考慮一下如果有一天我們修改了其中的一個文件(比如說mytool1.c)那么我們 難道還要重新輸入上面的命令?也許你會說,這個很容易解決啊,我寫一個SHELL腳本,讓她幫我去完成不就可以了.是的對于這個程序來說,是可以起到作用 的.但是當我們把事情想的更復雜一點,如果我們的程序有幾百個源程序的時候,難道也要編譯器重新一個一個的去編譯? 為此,聰明的程序員們想出了一個很好的工具來做這件事情,這就是make.我們只要執行以下make,就可以把上面的問題解決掉.在我們執行make之 前,我們要先編寫一個非常重要的文件.--Makefile.對于上面的那個程序來說,可能的一個Makefile的文件是: # 這是上面那個程序的Makefile文件 main:main.o mytool1.o mytool2.o &nb
原文地址:http://www.cnblogs.com/tankzhouqiang/archive/2010/03/07/1968345.html
posted on 2012-06-19 11:39
風輕云淡 閱讀(651)
評論(0) 編輯 收藏 引用 所屬分類:
Linux