Gcc的Makefile簡單使用

2021-06-19 02:26:51 字數 3298 閱讀 7059

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