一套完整的makefile樣板
近來,經??吹接腥嗽儐杕akefile的寫法,這里根據本人經驗給出一個應用系統的完整例子,便于各位參考。 [b:569e1de998]應用系統的目錄結構如下:[/b:569e1de998] [code:1:569e1de998] ~/bin可執行程序目錄 ~/etc配置文件目錄 ~/inc頭文件目錄 ~/lib函數庫文
近來,經??吹接腥嗽儐杕akefile的寫法,這里根據本人經驗給出一個應用系統的完整例子,便于各位參考。
[b:569e1de998]應用系統的目錄結構如下:[/b:569e1de998]
[code:1:569e1de998]
~/bin 可執行程序目錄
~/etc 配置文件目錄
~/inc 頭文件目錄
~/lib 函數庫文件目錄
~/log 日志文件目錄
~/src 源程序文件目錄
~/src/lib 函數庫源程序目錄
~/src/lib/LIB_1 函數庫libLIB_1源程序目錄
~/src/APP_A 子系統APP_A源程序目錄
~/src/APP_A/mod_a 子系統APP_A模塊mod_a源程序目錄
~/.profile
~/makefile
[/code:1:569e1de998]
[b:569e1de998]~/makefile文件內容如下:[/b:569e1de998]
[code:1:569e1de998]
all:
@MakeSubDir() \
{ \
for DIR in `ls|grep&nbs'''l''';ls|grep -v&nbs'''l'''`; do \
if [ -d $${DIR} ]; then \
cd $${DIR}; \
MakeSubDir; \
if [ -f makefile -o -f Makefile ]; then \
echo ""; \
pwd; \
make all; \
fi; \
cd ..; \
fi; \
done; \
}; \
MakeSubDir
tar:
@tar -cf `date +%Y%m%d-%H%M%S`.tar .profile `ls|grpbpv&nbs;'''.tar''''`
[/code:1:569e1de998]
[b:569e1de998]~/src/lib/LIB_1/makefile文件內容如下:[/b:569e1de998]
[code:1:569e1de998]
ALL: INFO all
BASEDIR = $(HOME)
INC = $(BASEDIR)/inc
LIB = $(BASEDIR)/lib
PRDNAME = $(LIB)/libLIB_1
PRODUCT = $(PRDNAME).a $(PRDNAME).so
OBJS = LIB_1_f1.o LIB_1_f2.o
AR = ar <特定平臺ar可選參數>
CC =
clearcase/" target="_blank" >cc <特定平臺cc可選參數>
all: $(PRODUCT)
$(PRDNAME).a: $(OBJS)
@echo " Making $@ ..."
@$(AR) -r $@ $(OBJS)
$(PRDNAME).so: $(OBJS)
@echo " Making $@ ..."
@$(CC) -G -o $@ $(OBJS)
.c.o: *.h $(INC)/*.h
@echo " Compiling $< ..."
@$(CC) -c -I$(INC) $<
INFO:
@echo " make all - samenpwh&nbs;'''make'''' except this message"
@echo " make clear - remove object files"
@echo " make clean - remove all object and target files"
@echo ""
clear: FORCE
@rm -f *.o
clean: FORCE clear
@rm -f $(PRODUCT)
FORCE:
[/code:1:569e1de998]
[b:569e1de998]~/src/APP_A/mod_a/makefile文件內容如下:[/b:569e1de998]
[code:1:569e1de998]
ALL: INFO all
BASEDIR = $(HOME)
INC = $(BASEDIR)/inc
LIB = $(BASEDIR)/lib
BIN = $(BASEDIR)/bin
MODULE = $(BIN)/APP_A_mod_a
TESTER = APP_A_mod_a_t
PRODUCT = $(SERVER) $(TESTER)
CC = cc <特定平臺cc可選參數>
all: $(PRODUCT)
$(MODULE): APP_A_mod_a.o
@echo " Making $@ ..."
@$(CC) $? -o$@ -L$(LIB) -lLIB_1
APP_A_mod_a_t: APP_A_mod_a_t.o
@echo " Making $@ ..."
@$(CC) $? -o$@ -L$(LIB) -lLIB_1
.c.o: *.h $(INC)/*.h
@echo " Compiling $< ..."
@$(CC) -c -I$(INC) $<
INFO:
@echo " make all - samenpwh&nbs;'''make'''' except this message"
@echo " make clear - remove object files"
@echo " make clean - remove all object and target files"
@echo ""
clear: FORCE
@rm -f *.o
clean: FORCE clear
@rm -f $(PRODUCT)
FORCE:
[/code:1:569e1de998]
[b:569e1de998]使用方法:[/b:569e1de99]b>在主目錄下用'''make''''命令能夠首先建立函數庫,然后建立所有目標
2.在主目錄下使用''mk&bsp;tar''''命令能夠對整個系統進行打包,生成的文件以日期和時間命名。
在下目錄中直接用'''make''''命令會首先給出用法提示,然后建立本目錄所有目標。
<>.在最下層子目錄中使用''mk&bsp;all''''命令不出現提示信息,直接建立本目錄所有目標。
<>.最層子目錄中使用''''k&bp;clear''''命令可以清除本目錄的所有.o文件。
<>.最層子目錄中使用''''k&bp;clean''''命令可以清除本目錄的所有.o文件和建立的所有目標。
[b:569e1de998]注:[/b:569e1de998]在某些環境下,由于make中調用shell命令的機制,可能不支持遞歸。
rootclown 回復于:2005-04-22 22:57:31
|
收藏了,一直也沒靜下心學習makefile的寫法:(
|
wildworf 回復于:2005-04-23 13:52:01
|
我們現在的項目里,我寫的和這個也差不多哦,但沒這么全,學習學習
|
brucewoo 回復于:2005-04-25 14:48:51
|
真的很不錯
|
溫暖的夏季 回復于:2005-04-26 16:14:40
|
好貼子!!多些樓主!!!
|
silverwolf 回復于:2005-04-26 16:39:16
|
有句不太理解
for DIR in&nbs;sgp&nbp'''lib'''';l'''';ls|grpbpv&nbp'''lib''''`; do
.......
done
為什么不寫成:
for DIR in `ls`; do
......
done
有什么區別?
|
FH 回復于:2005-04-26 23:31:10
|
[quote:3821ea2993="silverwolf"]有句不太理解
for DIR in&nbs;sgp&nbp'''lib'''';ls|grpbpv&nbp'''lib''''`; do
......
done
為什么不寫成:
for DIR in `ls`; do
......
done
有什么區別?[/quote:3821ea2993]
lib需要先make
|
king1981 回復于:2005-04-27 13:34:39
|
無聊。。。。。。。。
|
yuxh 回復于:2005-04-27 13:49:33
|
[quote:e13e45f60d="king1981"]無聊。。。。。。。。[/quote:e13e45f60d]
年青人,不懂不要亂說
|
天祥星辰 回復于:2005-04-27 15:22:38
|
真的很不錯 高手就是高手 敬禮 收藏
|
duke_gun 回復于:2005-04-27 17:27:32
|
[quote:e46df39909="king1981"]無聊。。。。。。。。[/quote:e46df39909]
多看看就有得聊了。我當初寫Makefile時到SMTH上看了半天才轉過彎來。FH謝謝!
|
landu_liu 回復于:2005-04-27 22:27:55
|
這在學這個呢,謝謝樓主
|
獨行俠1 回復于:2005-04-28 09:59:17
|
這個比較有參考價值,已經放到自己的bolg里。在這和樓主說一聲
|
dayou 回復于:2005-04-28 22:27:15
|
action = new (clean, scan, codegen, compile, link)
= update (scan, compile, link)
= remake (compile, link)
= label_build (clean, retrieve, scan, compile, link)
= clean (clean)
= get (retrieve)
= codegen (codegen)
|
foxmanzj 回復于:2005-05-08 16:56:14
|
建議想學make還是man make,man cc看看吧。更全面
|
albcamus 回復于:2005-05-08 17:04:16
|
[quote:8c00f3762e="foxmanzj"]建議想學make還是man make,man cc看看吧。更全面[/quote:8c00f3762e]
這話過分了點兒吧?make和cc的手冊里有Makefile的寫法?
|
dolink 回復于:2005-05-08 21:20:38
|
[quote:67c70a570d="king1981"]無聊。。。。。。。。[/quote:67c70a570d]
高手的話 沉默就是最高尚的
不要出語刺激人啊
很煞人意志的
|
BetonArmEE 回復于:2005-05-14 18:43:05
|
補充:
應用系統里推薦再加上~/tbin ~/tmp目錄
tbin放的是專為系統寫的工具程序,比如 備份日志 的腳本
tmp目錄我就不說了
個人不同意見:
頭文件存放目錄名改成~/include
源代碼文件存放目錄結構
~/src/
~/src/AppA/ 應用程序A源代碼文件目錄
~/src/AppB/ 應用程序B源代碼文件目錄
~/libsrc/ 本系統專用庫源代碼文件目錄
~/toolsrc/ 本系統工具源代碼文件目錄
如果有另外通用函數庫(ū熱鏳own了個open函數庫為自己所用),建議另開一系統目錄
我單位都這樣管理系統目錄的,偷偷的來與大家分享,呵呵 ^_^
|
mq110 回復于:2005-07-14 11:54:01
|
不錯 收藏了.~
最開始的時候不會寫makefile.現在會寫了 感覺這些東西很有價值了.
|
prc 回復于:2005-07-14 17:56:47
|
收藏,贊??!
|
巡道工 回復于:2005-07-15 09:43:57
|
makefile 挺難的,在CSDN上看到了一個高手寫得一個教程,各位兄臺可以去看一下
about "makefile"命令
http://dev.csdn.net/article/20/20025.shtm
http://dev.csdn.net/user/haoel ------這是他的blog,是個牛的blog,是個牛 |
原文轉自:http://www.kjueaiud.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|