1. 程式人生 > >簡單Makefile編寫

簡單Makefile編寫

Makefile編寫
實際上,make工具是一個自動編譯管理器,能夠根據檔案的時間戳自動發現更新過的檔案從而減少編譯的工作量。同時,它通過讀入Makefile檔案中的內容來執行大量的編譯工作,使用者只需編寫一次簡單的編譯語句即可。它大大提高了專案開發和維護的工作效率。

Makefile基本結構
Makefile用來告訴make如何編譯和連結一個程式,它是make讀入的唯一配置檔案。
在一個Makefile中通常包含如下內容:

  1、需要由make工具建立的目標體,目標體通常是目標檔案、可執行檔案或是一個標籤
  2、要建立的目標所依賴的檔案。
  3、建立每個目標體時需要執行的命令

Makefile檔案格式如下:
target:依賴檔案
command
例如:有三個檔案分別為main.c fun.c fun.h,希望建立的目標為 main,根據依賴檔案,可寫成

        main:main.o fun.o
                gcc main.o fun.o -o main
        main.o:main.c
                gcc -c main.c  -o main.o
        fun.o:fun.c fun.h
                gcc -c fun.c fun.h -o fun.o
        clean:
                rm main.o fun.o main
        其中,clean由於缺少目標,稱之為偽目標檔案,需要執行clean,可輸入make clean執行

Makefile變數
建立變數的目的:用來代替一個文字字串

包括:
1、系列檔案的名字
2、傳遞給編譯器的引數
3、需要執行的程式
4、需要查詢原始碼的目錄
5、需要輸出資訊的目錄
6、需要完成的其他事

變數定義的兩種方式:
遞迴展開方式 VAR = var
簡單方式 VAR := var

建立變數後,先前示例可寫為:

    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c -Wall -o
    main:$(OBJS)
        $(CC) $(FLAGS) main
    fun.o:fun.c fun.h
        $(CC) $(FLAGS) fun.c fun.o
    clean:
        rm main $(OBJS)

Makefile包含一些自動變數,可以更加方便的進行使用.

自動變數:
$* 不包含副檔名的目標檔名稱
$+ 所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案
$< 第一個依賴檔案的名稱
$?所有時間戳比目標檔案晚的依賴檔案,並以空格分開
[email protected]目標檔案的完整名稱
$^ 所有不重複的目標依賴檔案,以空格分開
$% 如果目標是歸檔成員,則該變量表示目標的歸檔成員名稱

有了自動變數的參與,則上例Makefile可寫成

    OBJS=main.o fun.o
    CC=gcc
    CFLAGS=-c -Wall -o
    main:$(OBJS)
        $(CC) $(FLAGS) [email protected]
    fun.o:fun.c fun.h
        $(CC)  $(FLAGS) $<  [email protected]
    clean:
        rm main $(OBJS)

通過上述步驟,已經完成了一個簡單的Makefile檔案的具體編寫,Makefile檔案的編寫是一個程式設計師的基本功,掌握了Makefile編寫,在面對大型專案時,應付起來才輕鬆。

相關推薦

簡單Makefile編寫教程

Makefile編寫 1. make和Makefile的介紹 1.1 make工具 利用make工具可以自動完成編譯工作。這些工作包括: 如果僅僅修改了某幾個原始檔,則只重新編譯這幾個原始檔; 如果某個標頭檔案被修改,則重新編譯所有包含該標頭檔

簡單Makefile編寫

Makefile編寫 實際上,make工具是一個自動編譯管理器,能夠根據檔案的時間戳自動發現更新過的檔案從而減少編譯的工作量。同時,它通過讀入Makefile檔案中的內容來執行大量的編譯工作,使用者只需編寫一次簡單的編譯語句即可。它大大提高了專案開發和維護的工

Linux操作——簡單Makefile檔案的編寫

I、在eg目錄下新建“hello.c”檔案 //hello.c檔案 #include <stdio.h> int main() { printf ("Hello World!\n"); return 0; } II、在hello目錄下新建“Makefil

Android簡單編寫一個txt閱讀器(沒有處理字符編碼),適用於新手學習

選項 tro 源碼 tin open 打開文件 package idt pac   本程序只是使用了一些基本的知識點編寫了一個比較簡單粗陋的txt文本閱讀器,效率不高,只適合新手練習。所以大神勿噴。   其實想到編寫這種程序源自本人之前喜歡看小說,而很多小說更新太慢,所以本

Linux——makefile編寫

另一個 arch 運用 大量 技術 公司 的人 16px sdn 以前對makefile的編寫,限於剛開始接觸,我都比較局限一些死板的格式,有時候就會顯得有些繁瑣。在進一步了解一些系統編譯和鏈接的知識後,對makefile編寫流程有了一些新的認識,所以來此梳理梳理,方便更靈

MAKEFILE編寫學習--1

makefile是在編譯中大型程式中使用的自動化編譯工具make依賴的指令檔案。這樣可以使得程式的編譯更加便捷快速。 makefile的一般規則如下: target ... : prerequisites ... command target即是一個目標檔案,它可以是可執行程式

【android】Android平臺編譯makefile編寫規則

Date: 2018.10.9 1、參考 https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ https://blog.csdn.net/yuanjize1996/article/det

Makefile 編寫

        由於專案中經常需要用到MakeFile的編寫,但是有經常容易忘掉其中某些字元含義,因此特寫出此Makefile部落格,用來直接的參考而非對Makefile的詳細講解。 1、一個普通的Makefile指令碼示例 # 這是一個簡單的Makefile,沒有使用變

Linux系統使用入門進階總結(7)——CMake簡單編寫規則

文章轉自: https://blog.csdn.net/VennyJin/article/details/84995621 本篇以使用CMakeLists.txt構建一個簡單的OpenCV程式為例,簡單介紹一下CMakeLists.txt的編寫規則,各位讀者若後期有進一步的需求,強烈推薦

如何將多個C檔案連結在一起----Makefile編寫及make指令

需使用GCC編譯器,關於MinGW的安裝指南:https://people.eng.unimelb.edu.au/ammoffat/teaching/20005/Install-MinGW.pdf   單個.c檔案且沒有使用自定義標頭檔案的編譯,在命令列:   &nbs

如何寫一個簡單makefile

關於書寫簡單的makefile檔案,mark兩篇講解明白的部落格,看完至少可以寫出一個簡單的makefile檔案出來轉載地址:第一篇makefile 介紹make命令執行時,需要一個 makefile 檔案,以告訴make命令如何去編譯和連結程式。首先,我們用一個示例來說明m

微信小程式入門-簡單頁面編寫

前言 今天微信小程式正式上線,抱著學習新技術的心態開始第一次接觸微信小程式,無論外面怎麼吹微信小程式怎麼幹掉大量的原生的app,作為一個新的事物,存在就必定有其存在的價值,作為一個學習者要保持一個正確的學習心態。勇於的追求新的東西。 應用範圍 張小龍對小程

簡易Makefile編寫筆記

簡易Makefile編寫筆記 g++的基本使用    習慣IDE的一鍵編譯執行有時候並不是一件好事,特別是對於我這種連編譯、連結、構建、除錯分別是什麼都搞不清楚的人。查閱了一些資料後,我得知gcc/g++是一種常用的程式構建工具,它可以把原始碼、標頭檔案連結起來,構建出可執行的

g++多檔案編譯和簡單MakeFile檔案寫法

上文(g++基本用法)介紹簡單的g++編譯器的用法,只是針對沒有依賴關係的單個檔案的操作,當我們有多個檔案需要編譯的時候,是如何工作的呢?下面以簡單的例項進行介紹,然後把例項以MakeFile檔案實現,並對MakeFile檔案進行簡單介紹。      準備工作,下面是需要的簡單例項檔案及程式碼:   mai

ARM:Makefile編寫、連結指令碼編寫、裸板shell框架

《Makefile編寫、連結指令碼編寫、裸板shell框架》<tips>' 工具:UtraEdit 程式碼編輯工具// 此工具裡面 Ctrl + h 檢視ASCII碼<tips>vi中命令模式下:':e main.c   // 開啟main.c':b

C語言學習之1(Microsoft Visual Studio即VC6軟體的安裝及hello world 簡單例子編寫

獲取軟體 安裝軟體 下載後,解壓檔案,執行解壓後根目錄下的VC6CN\SETUP.EXE,開始執行安裝,妥善安裝後,例如我的按照幾乎預設的安裝方式(中間就修改了碟符路徑),安裝在D:\Program Files (x86)\Microso

模組-kernel 模組編譯(Makefile編寫

發現自己以前寫的2.4的模組無法在2.6下面編譯使用了,需要用新的Makefile才行。簡單的說就像這個樣子:                                                                                  

makefile編寫入門

這篇文章真的只是入門,只介紹最簡單的makefile編寫方法。還是用我們上篇文章的例子:my_class.h和my_class.cpp包含了自己編寫的類my_class,在test.cpp當中包含了main函式並且呼叫了my_class。則makefile可以如下寫:test

Makefile編寫例項(生成so檔案)

CC = gcc XX = g++ CFLAGS = -Wall -O -g #TARGET = ./msgsql_client PROTOBUF_INC=/usr/local/shipu/mdpserver/libs/protobuf-2.5.0/output/inclu

多檔案編譯的makefile編寫(附當前目錄下所有.c/.cpp檔案編譯makefile)

C程式碼是如何變成可以執行程式的過程:     1、由前處理器把程式設計師所編寫的C程式碼翻譯成標準C程式碼,可以得到以.i結尾的預處理檔案。         gcc -E code.c         gcc -E code.c -o code.i      2、由彙編器