關於Linux下對於makefile的理解

2022-09-26 15:57:19 字數 1670 閱讀 3823

什麼是makefile呢?在linux下makefile我們可以把理解為工程的編譯規則。乙個工程中原始檔不計數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,那些檔案需要先編譯,那些檔案需要後編譯,那些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣,其中也可執行作業系統的命令。

makefile帶來的好處就是---「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大地提高了軟體開發的效率。

make命令在執行時,需要乙個makefile檔案,以告訴make命令要怎樣去編譯鏈結程式。只要我們makefile寫的足夠好,make命令會自動智慧型的根據當前檔案自己編譯所需要的檔案和鏈結目標檔案。

makefile的規則:

target:prerequisites

command

.......................

target是目標檔案,prerequisites就是要生成target所需要的檔案或是目標。command就是make需要執行的命令。這是乙個檔案依賴關係,也就是說,target這乙個或多個的目標檔案依賴於prerequisites中的檔案,其生成規則定義在command中。如果prerequisites中如果有乙個以上的檔案比target檔案內容要新的話,command所定義的檔案就會被執行。這就是makefile最核心的內容。

舉個栗子:

先準備三個檔案:file1.c,file2.c,file2.h

file1.c:

#include

int main()

file2.h:

#ifndef file2_h_

#define file2_h_

void file2printf();

#endif

file2.c

#include"file2.h"

void file2printf()

那麼它的makefile怎麼寫呢?(makefile檔案和檔案在同一目錄下)

test:file1.o file2.o          //test依賴file1.o和file2.o兩個目標檔案

gcc -c file1.o file2.o -o test    //編譯出test可執行檔案,-o 表示指定的目標檔名

file1.o:file1.c file2.h     dzuhfuwwl     //編譯出file1.o檔案,file1.o依賴於file1.c和file2.h,-c表示gcc只把給他的檔案編譯成目標檔案  

gcc -c file1.c -o file1.o

file2.o:file2.c file2.h                       //這兩句與上兩句相同

gcc -c file2.c -o file2.o

.phony:clean

clean:

rm -rf* .o test程式設計客棧      //當輸入make clean命令時,就會刪除所有的.o檔案和test檔案了

注意:每個命令列之前都必須有tab符號。

這是簡單的makefile的寫法,其實makefile還有很多的功能注意點值www.cppcns.com得學習。大家可以下去自行學習

本文標題: 關於linux下對於makefile的理解

本文位址: /os/linux/176344.html

Linux裝置驅動初探 多原始檔Makefile

首先介紹一下 init這個標誌在驅動原始檔中的作用吧。核心中帶 的函式 核心api函式具有這種名稱的,通常都是一些介面的底層函式,應該謹慎使用。實質上,這裡的雙下劃線就是要告訴程式設計師 謹慎呼叫,否則後果自負。以 init為例,init表明該函式僅在初始化期間使用。在模組被裝載之後,模組裝載器就會...

linux下對於ntfs分割槽的訪問

一 ntfs分割槽的訪問 最好的辦法是在linux安裝前已經具有ntfs分割槽,這樣在安裝如mandrake和suse linux版本時,可以自動為你安裝相應的核心並設定好,你就可以在不知情的情況下自由地訪問windows分割槽,這也是我推薦初學者使用mandrake或者suse linux的原因,...

Linux中的命令 make f 是什麼意思

linux下makefile教程 一 linux下makefile教程 二 linux下makefile教程 三 二 makefile的檔名 預設的情況下,make命令會在當前目錄下按順序找尋檔名為 gnumakefile makef ile makefile 的檔案,找到了解釋這個檔案。在這三個檔...