當前位置:
首頁 >
Linux学习笔记——例说makefile 综合案例
發布時間:2025/4/16
50
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Linux学习笔记——例说makefile 综合案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0.前言 從學習C語言開始就慢慢開始接觸makefile,查閱了非常多的makefile的資料但總感覺沒有真正掌握makefile,假設自己動手寫一個makefile總認為非常吃力。所以特意借助博客總結makefile的相關知識,通過樣例說明makefile的詳細使用方法。 例說makefile分為下面幾個部分,很多其它內容請參考【例說makefile索引博文】 ? ? 1.僅僅有單個C文件? ? 2.含有多個C文件? ?? 3.須要包含頭文件路徑 4.添加宏定義 5.添加系統共享庫 6.添加自己定義共享庫 7.一個實際的樣例
【代碼倉庫】——makefile-example 代碼倉庫位于bitbucket,可借助TortoiseHg(GUI工具)克隆代碼或者在網頁中直接下載zip包。 【本例說明】
本例借助開源項目freemodbus展開來分析makefile的詳細使用方法,freemodbus包含多個平臺的移植分支,本例主要從linuxTCP入手。
1.makefile文件 請替換當中的[tab]。并以代碼倉庫中的makefile文件為主。 # 指定編譯器 CC = gcc# CFLAG包含頭文件文件夾 CFLAGS = -g -Wall# 頭文件查找路徑 INC = -Iport -I../../modbus/rtu \-I../../modbus/ascii -I../../modbus/include -I../../modbus/tcp# 靜態鏈接庫 LDFLAGS = LDLIBS = -lpthread # 目標 TARGET = tcpmodbus # 源文件 SRC = demo.c port/portother.c \port/portevent.c port/porttcp.c \../../modbus/mb.c ../../modbus/tcp/mbtcp.c \../../modbus/functions/mbfunccoils.c \../../modbus/functions/mbfuncdiag.c \../../modbus/functions/mbfuncholding.c \../../modbus/functions/mbfuncinput.c \../../modbus/functions/mbfuncother.c \../../modbus/functions/mbfuncdisc.c \../../modbus/functions/mbutils.c# 源文件編譯為目標文件 OBJS = $(SRC:.c=.o)# 鏈接為可運行文件 $(TARGET): $(OBJS) [tab]$(CC) $^ -o $@ $(LDFLAGS) $(LDLIBS)# 清除可運行文件和目標文件 clean: [tab]rm -f $(OBJS) [tab]rm -f $(TARGET)# 編譯規則 增加頭文件 $@代表目標文件 $< 代表第一個依賴文件 %.o:%.c [tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<
2.詳細說明 【1】freemodbus中的文件較多,INC包含全部的頭文件查找路徑,路徑使用前綴-I表示,請注意若路徑較多時通過"\"實現續行。 【2】此處使用了共享庫pthread,共享庫的設備一般包含兩個方面。第一,共享庫的名稱 DLIBS。共享庫的查找路徑LDFLAGS。因為pthread為系統共享庫,使用了系統默認的查找路徑 /usr/lib,所以LDFLAGS設置能夠省略,若須要制定共享庫文件夾,在文件夾前增加-L就可以。 【3】$(CC) $^ -o $@?$(LDFLAGS) $(LDLIBS)?和共享庫設置有關的參數須要放在鏈接指令中。
3.運行過程 make clean && make ? ? 【控制臺輸出】 輸出內容較多。此處省略。
? ? 【執行】 sudo ./tcpmodbus Type 'q' for quit or 'h' for help! > h FreeModbus demo application help:'d' ... disable protocol stack.'e' ... enabled the protocol stack's' ... show current status'q' ... quit applicationr'h' ... this information >
? ? 【說明】 【1】編譯時增加了頭文件查找路徑。 【2】鏈接時增加了共享庫。
4.總結 【1】LDIBS指定共享庫。共享庫以 -l 為前綴。 【2】LDFLAGS指定共享庫查找路徑。路徑以 -L 為前綴。
【代碼倉庫】——makefile-example 代碼倉庫位于bitbucket,可借助TortoiseHg(GUI工具)克隆代碼或者在網頁中直接下載zip包。 【本例說明】
本例借助開源項目freemodbus展開來分析makefile的詳細使用方法,freemodbus包含多個平臺的移植分支,本例主要從linuxTCP入手。
本文將不會闡述freemodbus的詳細使用方法,而是以makefile的使用方法為主。
1.makefile文件 請替換當中的[tab]。并以代碼倉庫中的makefile文件為主。 # 指定編譯器 CC = gcc# CFLAG包含頭文件文件夾 CFLAGS = -g -Wall# 頭文件查找路徑 INC = -Iport -I../../modbus/rtu \-I../../modbus/ascii -I../../modbus/include -I../../modbus/tcp# 靜態鏈接庫 LDFLAGS = LDLIBS = -lpthread # 目標 TARGET = tcpmodbus # 源文件 SRC = demo.c port/portother.c \port/portevent.c port/porttcp.c \../../modbus/mb.c ../../modbus/tcp/mbtcp.c \../../modbus/functions/mbfunccoils.c \../../modbus/functions/mbfuncdiag.c \../../modbus/functions/mbfuncholding.c \../../modbus/functions/mbfuncinput.c \../../modbus/functions/mbfuncother.c \../../modbus/functions/mbfuncdisc.c \../../modbus/functions/mbutils.c# 源文件編譯為目標文件 OBJS = $(SRC:.c=.o)# 鏈接為可運行文件 $(TARGET): $(OBJS) [tab]$(CC) $^ -o $@ $(LDFLAGS) $(LDLIBS)# 清除可運行文件和目標文件 clean: [tab]rm -f $(OBJS) [tab]rm -f $(TARGET)# 編譯規則 增加頭文件 $@代表目標文件 $< 代表第一個依賴文件 %.o:%.c [tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<
2.詳細說明 【1】freemodbus中的文件較多,INC包含全部的頭文件查找路徑,路徑使用前綴-I表示,請注意若路徑較多時通過"\"實現續行。 【2】此處使用了共享庫pthread,共享庫的設備一般包含兩個方面。第一,共享庫的名稱 DLIBS。共享庫的查找路徑LDFLAGS。因為pthread為系統共享庫,使用了系統默認的查找路徑 /usr/lib,所以LDFLAGS設置能夠省略,若須要制定共享庫文件夾,在文件夾前增加-L就可以。 【3】$(CC) $^ -o $@?$(LDFLAGS) $(LDLIBS)?和共享庫設置有關的參數須要放在鏈接指令中。
請注意共享庫應該插入鏈接過程中而不是編譯過程。
3.運行過程 make clean && make ? ? 【控制臺輸出】 輸出內容較多。此處省略。
? ? 【執行】 sudo ./tcpmodbus Type 'q' for quit or 'h' for help! > h FreeModbus demo application help:'d' ... disable protocol stack.'e' ... enabled the protocol stack's' ... show current status'q' ... quit applicationr'h' ... this information >
? ? 【說明】 【1】編譯時增加了頭文件查找路徑。 【2】鏈接時增加了共享庫。
4.總結 【1】LDIBS指定共享庫。共享庫以 -l 為前綴。 【2】LDFLAGS指定共享庫查找路徑。路徑以 -L 為前綴。
總結
以上是生活随笔為你收集整理的Linux学习笔记——例说makefile 综合案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Laravel API记录
- 下一篇: Linux 内核存缺陷:66% 安卓设备