Makfile檔案編寫

2022-07-15 15:39:10 字數 1542 閱讀 4178

一、make是什麼

gnu make是乙個工程管理器,專門負責管理、維護較多檔案的處理,實現自動化編譯。如果乙個工程專案中,有成百上千個**原始檔,若其中乙個或多個檔案進過修改,make就需要能夠自動識別更新了的**,不需要像方法1一樣逐個輸入編譯冗長的命令列,就可以完成最後的編譯工作。make執行時,自動尋找makefile(makefile)檔案,然後執行編譯工作。因此,我們需要自己編寫makefile檔案(makefile與makefile都可以直接被make命令識別,下同。但linux區分大小寫)來管理、維護工程檔案,提高實際專案的工作效率。

二、適用什麼情況

1)如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。

2)如果這個工程的某幾個c檔案被修改,那麼我們只編譯被修改的c檔案,並鏈結目標程。

3)如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這幾個標頭檔案的c檔案,並鏈結目標程式。

三、主要過程

1.設定編譯環境 set compile environment

2.獲取要編譯的原始檔,以及把原始檔轉換為目標檔案 ( 原始檔和目標檔案) source to obj

3.將檔案編譯為目標檔案 objing

4.將目標檔案鏈結成可執行檔案或(打包為)動態庫,或靜態庫  linking

5.其他方面 clean等

四、示例

## 設定編譯環境

cc:=gcc

cxx:=g++

bin:= libdemo.so

flags := -wall -g -fpic

cxx_flags := -wall -g -pipe -fpic -shared -export-dynamic

lib := -l../common/test/ -ltest

include_path := -i/common/ -i../common/test/

## 獲取要編譯的原始檔,以及把原始檔轉換為目標檔案

sources := $(wildcard *.c *.cpp)

objs := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(sources)) )

## 將原始檔編譯為目標檔案

%.o: %.c

$(cc) $(flags) -c $< -o $@ $(include_path)

%.o:%.cpp

$(cxx) $(flags) -c $< -o $@ $(include_path)

## 將目標檔案鏈結成可執行檔案或動態庫,或靜態庫

$(bin) : $(objs)

$(cxx) $(cxx_flags) $(objs) $(include_path) $(lib) -o $(bin)

chmod a+x $(bin)

## 其他

clean:

rm -rf *.o $(bin)

install:

cp $(bin) ../common/bin

makfile 中 變數的含義

例子 dep sed dependencies q makefile tmp dep sed dependencies q makefile tmp make for i in init c do echo n init cpp m i done tmp make cp tmp make makef...

Android中makfile的隨記

什麼是makefile?也許非常多winodws的程式設計師都不知道這個東西,由於那些windows的ide都為你做了這個工作,但我認為要作乙個好的android底層程式設計師。makefile還是要懂。特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個...

編寫boot exe檔案

org 07c00h 程式會被載入到7c00處,所以需要這一句 mov ax,cs mov ds,ax mov es,ax call dispstr 呼叫顯示字串例程 jmp 無限迴圈 dispstr mov ax,bootmessage mov bp,ax es bp 串位址 mov cx,16 ...