posts - 134,comments - 22,trackbacks - 0
1.根据例子说明,一下是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个步骤

       1.宏定义。主要功能是定义一些宏变量已替代较长的编译支持信息。一般情况下针对编译所需要得.h头文件,.a/.so的库文件路径。比如例子中的CFLAGS是oracle预编译需要数据库支持的头文件路径。LIBHOME是oracle环境编译需要数据库库文件路径。

       2.源文件之间的相互依赖关系。列出需要产生目标文件编译依赖的文件。比如例子中的test目标,其产生时会检测(test.o test1.o test1.o)这些依赖文件的变化,如果依赖文件有变化会自动先编译依赖文件。

       3.可执行的命令.即针对目标关系,所作出的编译行为。比如test其检测完依赖文件后执行(cc -o $@ $(CFLAGS) $(LIBS) $^)编译链接产生目标执行文件test.

         4.宏使用时用(),{}来确认宏名称例如${LIB}加{}会查找LIB的宏内容,$LIB会查找L的宏内容。

   2.2 :常用编译项说明

            1. -I:制定头文件搜索的路径

            2. -L:连接需要的库文件路径

            3. –l:连接需要的库文件(比如:libmylib.so写作 –lmylib)

   2.3: 自动化变量说明:

$+ :所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。

$?:所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚

$^ :所有的依赖文件,以空格分开,不包含重复的依赖文件。
$< :第一个依赖文件的名称。
$@ :目标的完整名称。

$* :不包含扩展名的目标文件名称。
$% :如果目标是归档成员,则该变量表示目标的归档成员名称。

具体对照使用以上makefile,执行make haha得到如下对照信息:

$ make haha

test.o test1.o test1.o

test.o test1.o

test.o test1.o

test.o

haha

   2.4:后缀规则:

            .SUFFIXES: .sqc .c .o制定新的后缀规则。(%.c:%.sqc),( %.o:%.c)即规则行为。就是将所有.sqc转为.c,.c再转为.o。

            .c.o:等价于%.o:%.c

3.注意:

    分行符"后面不能再有其他任何内容。

    对齐行最好采用^I(tab键)

    注释符号#

    include包含编译文件

posted on 2009-12-09 13:36 何克勤 阅读(417) 评论(0)  编辑  收藏 所属分类: GNU Linux/Unix

只有注册用户登录后才能发表评论。


网站导航: