分页: 1 / 1

请教下面makefile中的两个问题

发表于 : 2006-08-15 17:18
lk_517
# ### Customising
# # 用户设定
# #
# # Adjust the following if necessary; EXECUTABLE is the target
# # executable's filename, and LIBS is a list of libraries to link in
# # (e.g. alleg, stdcx, iostr, etc). You can override these on make's
# # command line of course, if you prefer to do it that way.
# #
# # 如果需要,调整下面的东西。 EXECUTABLE 是目标的可执行文件名, LIBS
# # 是一个需要连接的程序包列表(例如 alleg, stdcx, iostr 等等)。当然你
# # 可以在 make 的命令行覆盖它们,你愿意就没问题。
# #

EXECUTABLE := test
#LIBS := alleg

# # Now alter any implicit rules' variables if you like, e.g.:
# #
# # 现在来改变任何你想改动的隐含规则中的变量,例如

CFLAGS := -g -Wall -O3 -m486
CXXFLAGS := $(CFLAGS)

# You shouldn't need to change anything below this point.
# #
# # 从这里开始,你应该不需要改动任何东西。(我是不太相信,太NB了!)

#vpath %.h ../headers # ### Customising
# # 用户设定
# #
# # Adjust the following if necessary; EXECUTABLE is the target
# # executable's filename, and LIBS is a list of libraries to link in
# # (e.g. alleg, stdcx, iostr, etc). You can override these on make's
# # command line of course, if you prefer to do it that way.
# #
# # 如果需要,调整下面的东西。 EXECUTABLE 是目标的可执行文件名, LIBS
# # 是一个需要连接的程序包列表(例如 alleg, stdcx, iostr 等等)。当然你
# # 可以在 make 的命令行覆盖它们,你愿意就没问题。
# #

EXECUTABLE := test
#LIBS := alleg # 要求 make 在“../headers”目录下搜索所有以“.h”结尾的文件。(如果在当前目录没有找到的话)

SOURCE := $(wildcard *.c) $(wildcard *.cc)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \
$(patsubst %.d,%.cc,$(MISSING_DEPS)))
CPPFLAGS += -MD

# 直接假定指定的目的需要更新
.PHONY : everything deps objs clean veryclean rebuild

everything : $(EXECUTABLE)

deps : $(DEPS)

objs : $(OBJS)

clean:
@$(RM-F) *.o
@$(RM-F) *.d

veryclean: clean
@$(RM-F) $(EXECUTABLE)

rebuild: veryclean everything

ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM-F) $(patsubst %.d,%.o,$@)
endif

-include $(DEPS)

$(EXECUTABLE) : $(OBJS)
gcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
# addprefix的作用是把第二个参数列表的每一项加上第一个参数值作为前缀

发表于 : 2006-08-15 17:19
lk_517
我的问题是
1 CFLAGS := -g -Wall -O3 -m486
CXXFLAGS := $(CFLAGS)
定义了却没有使用的地方,是不是被makefile默认使用了?

2 CPPFLAGS += -MD ,但是CFLAGS没有,那么为什么我编译c程序的时候也生成了.d文件?

发表于 : 2006-08-15 17:19
lk_517
我的问题是
1 CFLAGS := -g -Wall -O3 -m486
CXXFLAGS := $(CFLAGS)
定义了却没有使用的地方,是不是被makefile默认使用了?

2 CPPFLAGS = -MD ,但是CFLAGS没有,那么为什么我编译c程序的时候也生成了.d文件?

发表于 : 2006-08-23 21:33
lk_517
没有人知道么?

发表于 : 2006-08-28 9:19
5451vs5451
make -n -p 会打印出所有规则,包括默认规则,从中你可以找出什么地方需要用到CXXFLAGS,类似的你也可以找到什么地方用到了CPPFLAGS。cpp是c语言预处理器,编译任何c程序时肯定是要用到它的。