makefile檔案的簡單使用
下面針對只有幾個檔案的程式來簡單試驗一下makefile
在這裡要準備四個檔案
/* mytool1.h */
#ifndef _mytool_1_h
#define _mytool_1_h
void mytool1_print(char *print_str);
#endif
#include
#include
/*mytool1.c*/
#include "mytool1.h"
void mytool1_print(char *print_str)
/* mytool2.h */
#ifndef _mytool_2_h
#define _mytool_2_h
void mytool2_print(char *print_str);
#endif
#include
#include
/*mytool2.c*/
#include "mytool2.h"
void mytool2_print(char *print_str)
/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
上面的程式我們可以這樣編譯:
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
這樣也可以產生main 程式, 而且也不時很麻煩. 但如果要編譯的檔案很多的話,這種方法就不太適宜了。為此有makefile 檔案來幫忙,呵呵,編譯工作就簡單了。
# 這是上面那個程式的makefile 檔案
main: main.o mytool1.o mytool2.o
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
makefile是如何編寫的:
在makefile 中也# 開始的行都是注釋行。makefile 中最重要的是描述檔案的依賴關係的說明。
一般的格式是:
target :components
tab rule
第一行表示的是依賴關係。第二行是規則。
比如說我們上面的那個makefile 檔案的第二行
main :main.o mytool1.o mytool2.o
表示我們的目標(target)main 的依賴物件(components) 是main.o mytool1.o mytool2.o
當依賴的物件在目標修改後修改的話, 就要去執行規則一行所指定的命令. 就象我們的上
面那個makefile 第三行所說的一樣要執行gcc -o main main.o mytool1.o mytool2.o
注意規則一行中的tab 表示那裡是乙個tab 鍵
makefile
有三個非常有用的變數。分別是$@ ,$^ ,$<
代表的意義分別是:
$@ -- 目標檔案,
$^ -- 所有的依賴檔案,
$< -- 第乙個依賴檔案.
如果我們使用上面三個變數, 那麼我們可以簡化我們的makefile 檔案為:
1)
#這是簡化後的makefile
main :main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o :main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o :mytool1.c mytool1.h
gcc -c $<
mytool2.o :mytool2.c mytool2.h
gcc -c $<
clean :
-rm main main.o mytool1.o mytool2.o
2)
# 或者使用變數如下:
#/*makefile*/
objects=main.o mytool1.o mytool2.o
main:$(objects)
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
clean :
-rm main $(objects)
經過簡化後我們的makefile 是簡單了一點, 不過還可以再簡單一點. 這裡我們學習
乙個makefile 的預設規則
..c.o :
gcc -c $<
這個規則表示所有的.o 檔案都是依賴與相應的.c 檔案的. 例如mytool1.o 依賴於mytool1.c
這樣makefile 還可以變為:
# 這是再一次簡化後的makefile
objects=main.o mytool1.o mytool2.o
main:$(objects)
gcc -o $@ $^
..c.o:
gcc -c $<
clean :
-rm main $(objects)
好了, 我們的makefile 也差不多了, 如果想知道更多的關於makefile 規則可以檢視相應的
文件。
Gcc的Makefile簡單使用
makefile文 件的簡單使用 下面針對只有幾個檔案的程式來簡單試驗一下makefile 在這裡要準備四個檔案 mytool1.h ifndef mytool 1 h define mytool 1 h void mytool1 print char print str endif include...
Makefile教程 六 MakeFile使用函式
一 if函式 if函式很像gnu的make所支援的條件語句 ifeq,if函式的語法是 if 或是 if 可見,if函式可以包含 else 部分,或是不含。即if函式的引數可以是兩個,也可以是三個。引數是if的表示式,如果其返回的為非空字串,那麼這個表示式就相當於返回真,於是,會被計算,否則會被計算...
gcc和Makefile的 D U選項
對於gcc編譯器,有如下選項 d macro string,等價於在標頭檔案中定義 define macro string。例如 d true true,等價於 define true true d macro,等價於在標頭檔案中定義 define macro 1,實際上也達到了定義 define ...