簡單的makefile編寫

2021-07-24 17:22:44 字數 1237 閱讀 7782

cc ?= gcc

cflags = -wall -i/home/coc/target/sysroots/corei7-64-poky-linux/usr/include/libxml2

ldflags = -l/home/coc/target/sysroots/corei7-64-poky-linux/usr/libs

libs = -lxml2

object = cjson.o xmltojson.o

xmltojson : $(object)

$ -o xmltojson $(object) -lm `pkg-config --cflags --libs libxml-2.0`

cjson.o: cjson.c

$ -c cjson.c

xmltojson.o: xmltojson.c

$ -c xmltojson.c `pkg-config --cflags --libs libxml-2.0`

clean:

rm xmltojson $(object)

我有乙個需要,想要寫乙個xmltojson轉化的程式,於是想要寫乙個makefile來試驗一下,參照《跟我一起寫makefile》,

結構並不複雜,有兩個c檔案,兩個標頭檔案,以及乙個供程式啟動時的動態庫,首先指定編譯器,cc ?=gcc 假如不存在的話

則使用gcc 編譯器,否則使用系統預設編譯器.cflags 是用來說明動態庫的標頭檔案路徑,ldflags是指動態庫的庫檔案路徑,

libs則是指鏈結時具體的庫.

我用object來指定中間檔案,通過中間檔案來生成具體的可執行檔案,xmltojson 是具體的可執行檔案的名字,假如$(object)的

日期比xmltojson的新,那麼就會執行後面所執行的命令來生成xmltojson檔案。如果xmltojson所依賴的.o中間檔案並不存在,那麼

就會執行後面所進行的操作。

但是我並沒有使用cflags 和 ldflags,而是通過 pkg-config -cflags --lib libxml-2.0來查詢具體的庫和標頭檔案路徑,並加以

鏈結。但是都是一樣,有興趣可以試一下。

最後,定義clean規則來刪除可執行檔案和中間檔案。

類似於clean規則一樣,我們還可以新增類似

install:

之類的命令來個性化定製我們的makefile

假如想要生成兩個可執行檔案,那麼需要前面設定all: exe1 exe2

簡單編寫makefile

乙個makefile基本的規則 a b tab tab a為目標檔案,b為依賴檔案 可能含有多個 接下來為命令 必須含有tab 操作依賴檔案得到目標檔案 以乙個簡單的示例來演示如何編寫乙個基礎的makefile ifndef file1 h define file1 h ifdef cplusplu...

編寫簡單的makefile

假如有乙個上百個檔案的 構成的專案,如果只是對其中乙個或少數幾個檔案進行了修改,若用gcc編譯工具就不得不把整個專案裡的檔案重新編譯一遍。編譯過程分為編譯 彙編鏈結等階段。其中,編譯階段僅檢查語法錯誤以及函式與變數的宣告是否正確,在鏈結階段則主要完成函式鏈結和全域性變數的鏈結。因此,沒有改動的源 根...

簡單Makefile的編寫

在乙個較大的工程中,工程的原始檔按不同的型別 功能 模組分類,這樣給我們在編譯的過程中就增加了較大的工程量,並且有些還有可能要進行一些較為複雜的操作。編譯一次還可以,但我們在除錯的過程中不可能只編譯一次,為了解決這個麻煩,做到一勞永逸。我們就可以通過編寫makefile將這些需要執行的步驟寫進去。因...