首先说明一下,我是个才接触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) |