posts - 134,comments - 22,trackbacks - 0
          1.根據(jù)例子說明,一下是linux下oracle10的程序編譯簡單的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.說明

          2.1一般makefile編寫有3個(gè)步驟

                 1.宏定義。主要功能是定義一些宏變量已替代較長的編譯支持信息。一般情況下針對編譯所需要得.h頭文件,.a/.so的庫文件路徑。比如例子中的CFLAGS是oracle預(yù)編譯需要數(shù)據(jù)庫支持的頭文件路徑。LIBHOME是oracle環(huán)境編譯需要數(shù)據(jù)庫庫文件路徑。

                 2.源文件之間的相互依賴關(guān)系。列出需要產(chǎn)生目標(biāo)文件編譯依賴的文件。比如例子中的test目標(biāo),其產(chǎn)生時(shí)會檢測(test.o test1.o test1.o)這些依賴文件的變化,如果依賴文件有變化會自動(dòng)先編譯依賴文件。

                 3.可執(zhí)行的命令.即針對目標(biāo)關(guān)系,所作出的編譯行為。比如test其檢測完依賴文件后執(zhí)行(cc -o $@ $(CFLAGS) $(LIBS) $^)編譯鏈接產(chǎn)生目標(biāo)執(zhí)行文件test.

                   4.宏使用時(shí)用(),{}來確認(rèn)宏名稱例如${LIB}加{}會查找LIB的宏內(nèi)容,$LIB會查找L的宏內(nèi)容。

             2.2 :常用編譯項(xiàng)說明

                      1. -I:制定頭文件搜索的路徑

                      2. -L:連接需要的庫文件路徑

                      3. –l:連接需要的庫文件(比如:libmylib.so寫作 –lmylib)

             2.3: 自動(dòng)化變量說明:

          $+ :所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。

          $?:所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚

          $^ :所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件。
          $< :第一個(gè)依賴文件的名稱。
          $@ :目標(biāo)的完整名稱。

          $* :不包含擴(kuò)展名的目標(biāo)文件名稱。
          $% :如果目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱。

          具體對照使用以上makefile,執(zhí)行make haha得到如下對照信息:

          $ 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)容。

              對齊行最好采用^I(tab鍵)

              注釋符號#

              include包含編譯文件

          posted on 2009-12-09 13:36 何克勤 閱讀(424) 評論(0)  編輯  收藏 所屬分類: GNU Linux/Unix
          主站蜘蛛池模板: 黄平县| 望城县| 璧山县| 洪洞县| 原阳县| 吐鲁番市| 汕尾市| 和龙市| 西华县| 罗甸县| 和静县| 乳源| 通化县| 辽宁省| 太原市| 察哈| 吐鲁番市| 九龙县| 长乐市| 斗六市| 莱阳市| 通海县| 公主岭市| 安岳县| 定边县| 临沭县| 城固县| 锡林郭勒盟| 辽中县| 临沂市| 乐都县| 治多县| 台东县| 泽库县| 黔西| 华池县| 改则县| 陇南市| 越西县| 延安市| 仁布县|