1.根據(jù)例子說(shuō)明,一下是linux下oracle10的程序編譯簡(jiǎn)單的makefile文件
CC=cc -g
PROC=proc
CFLAGS=-DPRECOMP -I$(ORACLE_HOME)/precomp/public "
-I$(ORACLE_HOME)/xdk/include -I.
FLAGS= -D_ALL_SOURCE=1 -D_LINUX -g -I../../incl -D_GNU_SOURCE -D_IS_EAB=1 -D__USE_GNU=1 -D__GCC_296 -I/usr/include/libxml2 -I../csrc -I../../csrc/ -DPOSIX=1 -DLINUX
LIBHOME=$(ORACLE_HOME)/lib
LLIBSQL= `cat $(LIBHOME)/sysliblist` "
`cat $(LIBHOME)/ldflags` "
-lclntsh
LIBS= -L$(LIBHOME) $(LLIBSQL) -lmylib
.SUFFIXES: .sqc .c .o
%.c:%.sqc
$(PROC) $(PROCPLSFLAGS) iname=$^ hold_cursor=yes
%.o:%.c
$(CC) -c $(FLAGS) $(LIBS) $^
test:test.o test1.o test1.o
cc -o $@ $(FLAGS) $(LIBS) $^
rm -rf $^
haha:test.o test1.o test1.o
@echo "+="$+
@echo "?="$?
@echo "^="$^
@echo "<="$<
@echo "@="$@
@echo "*="$*
@echo "%="$%
|
2.說(shuō)明
2.1一般makefile編寫(xiě)有3個(gè)步驟
1.宏定義。主要功能是定義一些宏變量已替代較長(zhǎng)的編譯支持信息。一般情況下針對(duì)編譯所需要得.h頭文件,.a/.so的庫(kù)文件路徑。比如例子中的CFLAGS是oracle預(yù)編譯需要數(shù)據(jù)庫(kù)支持的頭文件路徑。LIBHOME是oracle環(huán)境編譯需要數(shù)據(jù)庫(kù)庫(kù)文件路徑。
2.源文件之間的相互依賴關(guān)系。列出需要產(chǎn)生目標(biāo)文件編譯依賴的文件。比如例子中的test目標(biāo),其產(chǎn)生時(shí)會(huì)檢測(cè)(test.o test1.o test1.o)這些依賴文件的變化,如果依賴文件有變化會(huì)自動(dòng)先編譯依賴文件。
3.可執(zhí)行的命令.即針對(duì)目標(biāo)關(guān)系,所作出的編譯行為。比如test其檢測(cè)完依賴文件后執(zhí)行(cc -o $@ $(CFLAGS) $(LIBS) $^)編譯鏈接產(chǎn)生目標(biāo)執(zhí)行文件test.
4.宏使用時(shí)用(),{}來(lái)確認(rèn)宏名稱例如${LIB}加{}會(huì)查找LIB的宏內(nèi)容,$LIB會(huì)查找L的宏內(nèi)容。
2.2 :常用編譯項(xiàng)說(shuō)明
1. -I:制定頭文件搜索的路徑
2. -L:連接需要的庫(kù)文件路徑
3. –l:連接需要的庫(kù)文件(比如:libmylib.so寫(xiě)作 –lmylib)
2.3: 自動(dòng)化變量說(shuō)明:
$+ :所有的依賴文件,以空格分開(kāi),并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。
$?:所有的依賴文件,以空格分開(kāi),這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚
$^ :所有的依賴文件,以空格分開(kāi),不包含重復(fù)的依賴文件。
$< :第一個(gè)依賴文件的名稱。
$@ :目標(biāo)的完整名稱。
$* :不包含擴(kuò)展名的目標(biāo)文件名稱。
$% :如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。
具體對(duì)照使用以上makefile,執(zhí)行make haha得到如下對(duì)照信息:
$ make haha
test.o test1.o test1.o
test.o test1.o
test.o test1.o
test.o
haha
2.4:后綴規(guī)則:
.SUFFIXES: .sqc .c .o制定新的后綴規(guī)則。(%.c:%.sqc),( %.o:%.c)即規(guī)則行為。就是將所有.sqc轉(zhuǎn)為.c,.c再轉(zhuǎn)為.o。
.c.o:等價(jià)于%.o:%.c
3.注意:
分行符"后面不能再有其他任何內(nèi)容。
對(duì)齊行最好采用^I(tab鍵)
注釋符號(hào)#
include包含編譯文件
posted on 2009-12-09 13:36
何克勤 閱讀(419)
評(píng)論(0) 編輯 收藏 所屬分類:
GNU Linux/Unix