H_PATH = $(HOME)/unix_c/include #H_PATH是包含头文件apue.h的目录
LIB_PATH = $(HOME)/unix_c/lib
#LIB_PATH是包含书中附带的一些函数库的.c文件的目录
INCLUDE = -I$(H_PATH) -I$(LIB_PATH)
CFLAGS = -g -w -c $(INCLUDE)
FILE = vfork.c error.c
OBJ = $(FILE:.c=.o)
#这里要添加所用到的函数的.o,下面要把他编译出来
all : $(OBJ)
cc -o $@ $(OBJ)
rm -f $(OBJ)
$(FILE).o :
cc $(CFLAGS) $(FILE).c
error.o :
cc $(CFLAGS) $(LIB_PATH)/error.c
clean:
rm -f all $(OBJ)
//方法二:考虑把附带的那些函数编译成.so或.a库包
//先看动态库的例子:多个常用函数编译成一个.so动态库,或者.a静态库
CFLAGS= -fpic -I$(MY_INCL)
OBJS = open_read.o open_write.o sort.o del_repeat.o
FUNC = open_read.c open_write.c sort.c del_repeat.c
#all : libfunc.so
//动态库,如果内容有改动,调用它的程序无须重新编译(如果接口没有被改的话)
#libfunc.so : $(OBJS)
# cc -o $@ -shared $(OBJS) -lc
# cp $@ $(MY_LIB)
all :libfunc.a
//静态库,如果内容有改动,调用它的程序需要重新编译
libfunc.a : $(OBJS)
ar ur $@ $(OBJS)
cp $@ $(MY_LIB)
$(OBJS) : $(F)*.c
cc $(CFLAGS) -c $*.c
clean:
rm -f $(OBJS) libfunc.so libfunc.a
//调用库包里的函数
OBJ=info.o
edit : $(OBJ)
cc -o $@ $(OBJ) -L$(MY_LIB) -lfunc
//如果.so和.a都存在,默认链接.so文件
rm -f $(OBJ)
info.o :
cc -c -I$(MY_INCL) info.c
clean:
rm -f edit $(OBJ)
//方法二:使用动态库
//*************** $(HOME)/unix_c/setenv *********** 记得导入
export LD_LIBRARY_PATH=$APUE_LIB:$LD_LIBRARY_PATH
//**************** ${HOME}/unix_c/public/make.def.public
APUE_LIB = $(HOME)/unix_c/lib #// 准备存放生成的库包
APUE_INCL = $(HOME)/unix_c/include #// apue.h的目录
//**************** 存放函数定义文件(.c文件)目录下的 Makefile
include ${HOME}/unix_c/public/make.def.public
CFLAGS = -c -I$(APUE_INCL)
OBJS = bufargs.o cliconn.o clrfl.o \
daemonize.o error.o lockreg.o locktest.o \
openmax.o pathalloc.o popen.o prexit.o prmask.o \
ptyfork.o linux_ptyopen.o readn.o recvfd.o \
senderr.o sendfd.o servaccept.o servlisten.o \
setfl.o signal.o signalintr.o \
sleep.o sleepus.o spipe.o \
tellwait.o ttymodes.o writen.o # pathconf.o sysconf.o
strerror.o errorlog.o
APUESO = libapue.so
all : $(APUESO)
$(APUESO) : $(OBJS)
cc -o $@ -shared -fpic $(OBJS) -lc
mv -f $(APUESO) $(APUE_LIB)
#all :libapue.a
#libapue.a : $(OBJS)
# ar ur $@ $(OBJS)
# mv -f $@ $(APUE_LIB)
$(OBJS) : $(F)*.c
cc $(CFLAGS) $*.c
clean:
rm -f $(OBJS)
//****************** main主函数文件目录下的 Makefile
include ${HOME}/unix_c/public/make.def.public
CFLAGS = -g -c -I$(APUE_INCL)
FILE = mainfile.c func.c //只要在这里修改添加文件名即可
OBJ = $(FILE:.c=.o)
all : $(OBJ)
cc -o $@ $(OBJ) -L$(APUE_LIB) -lapue
#$(OBJ) : $(F)*.c
# cc $(CFLAGS) $*.c
%.o:%.c
cc $(CFLAGS) $<
clean:
rm -f all $(OBJ)
没有评论:
发表评论