歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux Makefile編寫 詳述

Linux Makefile編寫 詳述

日期:2017/3/1 9:09:02   编辑:Linux編程

我之前總結了gcc的用法,那麼在實際工作中,每次用gcc會很麻煩,尤其是一些大型項目,有很多的目錄結構,這個時候我們就需要編寫Makefile文件,然後在實際工作中,用make來編譯大型的項目,相信搞過Android開發的一定對make,make install,make clean不陌生,分別是編譯,安裝和清理,下面我就用一個例子來說明Makefile怎麼編寫,還是上一講的三個文件
func1.c

func2.c

main.c

來看一個簡單的Makefile

Makefile的基本規則:
目標:依賴文件
執行程序
注意,執行程序前面要用tab鍵
還有Makefile只會認第一個總的目標,其他都是配合的目標

這裡我們的目標就是生成main,那麼需要依賴func1.o func2.o main.o
gcc -o main func1.o func2.o main.o 就是執行程序

下面再分別寫目標func1.o func2.o main.o

.PHONY:clean
clean:
rm -rf main func1.o func2.o main.o
這是一個偽目標,後面不跟依賴,目的只是執行後面的執行程序,當我們執行make clean時,就會執行rm命令,把生成的一些中間文件都刪除掉

好了,我們執行make,執行make就會去尋找Makefile,跟進裡面的配置來執行

然後我們來執行主程序

然後執行make clean

Makefile有一個好處,比如修改了其中某一個文件,重新make的時候,只會重新編譯修改的文件,其他文件不會編譯
比如我們什麼都不改,再執行make

比如我們現在修改下main.c,再make

我們看到func1.c和func2.c沒有被重新編譯,這也是用make的好處

一個簡單的Makefile就是這樣,下面我們來說下變量,我們可以在Makefile中定義變量,看下面的Makefile文件

我們定義了一個變量,object,接下來所有用到依賴的地方都用這個變量替換

我們還可以把條件判斷加進來

很簡單,不多說了

再說兩個變量
$@:代表目標文件
$^:代表所有的依賴
剛才的程序還可以這樣改

我們注意到在執行make的時候,執行程序都會輸出,如果不想看到輸出,可以在執行程序前面加一個@ 符號

其實我們還可以定義install的偽目標,一般這個命令就是把生成的可執行文件,復制到/usr/local下

有的時候,我們的Makefile不是真正的編譯文件,而是包含的另外一個文件,那麼就會去尋找另外一個文件,再編譯,我們看下android源碼跟目標的Makefile

那麼其實我們也可以這樣做,我們把Makefile改名為android.mk,然後新建一個Makefile

其實Makefile的規則遠遠不止這些,我這只是總結了一些簡單的,如果想了解更多的,大家去官網查即可

好了,Linux Makefile編寫就總結到這裡,如有問題,歡迎指正,謝謝。

實驗平台上Makefile詳細的解釋 http://www.linuxidc.com/Linux/2014-01/94827.htm

Makefile之Linux內核模塊的Makefile寫法分析 http://www.linuxidc.com/Linux/2013-06/85842.htm

Makefile之寫demo時的通用Makefile寫法 http://www.linuxidc.com/Linux/2013-05/84679.htm

Makefile之大型工程項目子目錄Makefile的一種通用寫法 http://www.linuxidc.com/Linux/2013-05/84678.htm

Linux多文件編程及Makefile的編寫 http://www.linuxidc.com/Linux/2016-08/134249.htm

Makefile隱含規則 http://www.linuxidc.com/Linux/2016-10/136057.htm

Makefile自動生成依賴,自動化編譯 http://www.linuxidc.com/Linux/2016-02/128726.htm

Copyright © Linux教程網 All Rights Reserved