Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445768
  • 博文数量: 111
  • 博客积分: 4290
  • 博客等级: 上校
  • 技术积分: 1301
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 14:22
个人简介

努力工作,建立一个幸福的家庭。

文章分类

全部博文(111)

文章存档

2015年(4)

2013年(9)

2012年(6)

2011年(17)

2010年(69)

2009年(6)

分类: LINUX

2010-04-13 21:04:12

首先说明一下,我是个才接触linux开发的新手,刚开始学习ldd2不久,个人感觉linux下的开发一个难点就是它的Makefile(至少对于我这 样一个新手来说是这样的),今天花了大半天的时间终于大概读懂了ldd2下例子程序中/scull/目录下的Makefile文件,我把其中我看懂的地方 给大家注释一下,希望大家能把我没看懂的地方也给补全,内容如下:

# Comment/uncomment the following line to disable/enable debugging
#DEBUG = y

# This Makefile has been simplified as much as possible, by putting all
# generic material, independent of this specific directory, into
# ../Rules.make. Read that file for details

TOPDIR := $(shell cd ..; pwd)
include $(TOPDIR)/Rules.make
#在Rules.make中主要定义了一些通用的宏,大家一看就明白的


# Add your debugging flag (or not) to CFLAGS
ifeq ($(DEBUG),y)
DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines
else
DEBFLAGS = -O2
endif

CFLAGS += $(DEBFLAGS)
CFLAGS += -I..

TARGET = scull
OBJS = $(TARGET).o
SRC = main.c pipe.c access.c

all: .depend $(TARGET).o
#执行到这里,make首先执行.depend,自动生成系统依赖的头文件,然后再生成目标文件
#$(TARGET).o

$(TARGET).o: $(SRC:.c=.o)
$(LD) -r $^ -o $@
# $(SRC:.c=.o)表示要生成cull.o文件,以main.o pipe.o access.o empty.o为依赖关系
# $^在此处表示main.o pipe.o access.o empty.o
# $@在此处表示scull.o
# make会根据隐士规则自动编译生成main.o pipe.o access.o empty.o

install:
install -d $(INSTALLDIR)
install -c $(TARGET).o $(INSTALLDIR)

clean:
rm -f *.o *~ core .depend
#这里的*~ core代表什么意思呢?

depend .depend dep:
$(CC) $(CFLAGS) -M *.c > $@
#前面已经说过了,这个目标的目的是利用gcc自动生成main.c pipe.c access.c empty.c的依
#赖关系,并将结果写入.depend中。

#对于现在这个条件语句的作用我没有看懂。
ifeq (.depend,$(wildcard .depend))
include .depend
endif

#对于现在这个条件语句的作用我没有看懂。
ifeq (.depend,$(wildcard .depend))
include .depend
endif

这句话的等价于
sinclude .depend

就是如果.depend 存在,则包含,如果不存在则不包
阅读(620) | 评论(0) | 转发(0) |
0

上一篇:编译LDD3-scull

下一篇:debugg经验_1

给主人留下些什么吧!~~