makefile 的寫作思路小結:
1)偽目標
2)命令(cc mkdir...)
3)目錄(絕對路徑、相對路徑、臨時目錄、條件加入的目錄...)
4)實際目標(對空目標分開處理)
5)include(寫在all之下)
6)建立目錄(對寫好的目錄加上條件並建立、同時可選擇加入依賴中)
7)實際目標的生成方法
8)完善依賴關係
9)標頭檔案的查詢與鏈結
10)庫檔案依賴關係的裁剪與新增
11)自動生成依賴關係並修改加入字首(經典六句話)
12)提取公共部分至make.rule檔案中並修改模組生成檔案的路徑
13)各個子模組的目標庫檔案的寫入與刪除
14)編寫總體makefile放在指定的build目錄中
注:一下程式都**於《專業嵌入式軟體開發》一書,李雲著
.phony:all clean
cc = gcc
rm = rm
rmflags =
-rfmkdir = mkdir
ar = ar
arflags = crs
dir_objs = objs
dir_deps = deps
dir_libs =..
/../
../libs
dir_exes =..
/../
../exes
dirs = $(dir_objs) $(dir_deps) $(dir_libs) $(dir_exes)
rms = $(dir_deps) $(dir_objs)
lib = libfoo.a
ifneq (
"$(lib)",""
)lib :
= $(addprefix $(dir_libs)/,
$(lib)
)rms +
= $(lib)
endif
exe = complicated
ifneq (
"$(exe)",""
)exe :
= $(addprefix $(dir_exes)/,
$(exe)
)rms +
= $(exe)
endif
srcs = $(wildcard *
.c)objs = $(srcs:
.c=.o)
objs :
= $(addprefix $(dir_objs)/,
$(objs)
)deps = $(srcs:
.c=.dep)
deps :
= $(addprefix $(dir_deps)/,
$(deps)
)#如下寫法只是在判斷dir_exes這個變數是不是空,而不是../
../.
./#ifeq(
"$(dir_exes)",""
)ifeq (
"$(wildcard $(dir_exes))",""
)dep_dir_exes :
= $(dir_exes)
endif
ifeq (
"$(wildcard $(dir_objs))",""
)dep_dir_objs :
= $(dir_objs)
endif
ifeq (
"$(wildcard $(dir_deps))",""
)dep_dir_deps :
= $(dir_deps)
endif
ifeq (
"$(wildcard $(dir_libs))",""
)dep_dir_libs :
= $(dir_libs)
endif
all:
$(exe) $(lib)
ifneq (
$(makecmdgoals)
,clean)
include $(deps)
endif
$(dirs)
:$(mkdir) $@
$(exe)
: $(dep_dir_exes) $(objs)
$(cc)
-o $@ $(
filter
%.o,$^
)$(lib)
: $(dep_dir_libs) $(objs)
$(ar) $(arflags) $@ $(
filter
%.o,$^
)$(dir_objs)/%
.o: $(dep_dir_objs)%.c
$(cc)
-o $@ -c $(
filter
%.c,$^
)$(dir_deps)/%
.dep: $(dep_dir_deps)%.c
@echo "creating $@ ..."
@set
-e ;
\$(rm) $(rmflags) [email protected] ;
\$(cc)
-e -mm $(
filter
%.c,$^
)> [email protected] ;
\sed 's,\(
.*\)
\.o[:]
*,objs/
\1.o $@:
,g'< [email protected] > $@ ;
\$(rm) $(rmflags) [email protected]
clean:
$(rm) $(rmflags) $(rms)
另外還有一篇很好的文章:
自己除錯通過的乙個通用makefile模板
DHCP工作過程
dhcp服務的工作過程 如果在區域網中部署了dhcp伺服器,並且客戶端設定為自動獲得ip位址。這樣當dhcp客戶端第一次登入網路的時候,也就是客戶端發現本機上沒有任何ip資料設定,它會向網路發出乙個dhcp discover封包。因為客戶端還不知道自己屬於哪乙個網路,所以封包的 位址會為 0.0.0...
FTP 工作過程
1 ftp伺服器執行ftpd守護程序,等待使用者的ftp請求。2 使用者執行ftp命令,請求ftp伺服器為其服務。例 ftp 202.119.2.197 3 ftpd守護程序收到使用者的ftp請求後,派生出子程序ftp與使用者程序ftp互動,建立檔案傳輸控制連線,使用tcp埠21。4 使用者輸入ft...
ping工作過程
dos 命令,一般用於檢測網路通與不通 也叫時延,其值越大,速度越慢 ping packet internet grope 網際網路包探索器,用於測試網路連線量的程式。ping 發 送乙個 icmp 回聲請求訊息給目的地並報告是否收到所希望的 icmp 回聲應答。它是用來檢查網路是否通暢或者網路連線...