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將這些需要執行的步驟寫進去。因...