Gcc的Makefile簡單使用

2021-04-25 02:55:59 字數 3581 閱讀 8822

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 ...