快乐虾<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
gcc-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.3.1
configure –target=bfin-uclinux-gnu
Blackfin系列DSP
Cygwin gcc 3.4.4
欢迎转载,但请保留作者信息
这个目标并不是放在gcc/Makefile中,而是在gcc/cp/Make-lang.in文件中,然后在gcc/Makefile中有这个的语句:
LANG_MAKEFRAGS = $(srcdir)/ada/Make-lang.in $(srcdir)/cp/Make-lang.in $(srcdir)/fortran/Make-lang.in $(srcdir)/java/Make-lang.in $(srcdir)/objc/Make-lang.in $(srcdir)/objcp/Make-lang.in $(srcdir)/treelang/Make-lang.in
ifneq ($(LANG_MAKEFRAGS),)
include $(LANG_MAKEFRAGS)
endif
这样就包含了gcc/cp/Make-lang.in。在此文件中是这样定义c++这条规则的:
# Define the names for selecting c++ in LANGUAGES.
# Note that it would be nice to move the dependency on g++
# into the C++ rule, but that needs a little bit of work
# to do the right thing within all.cross.
c++: cc1plus$(exeext)
cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ /
$(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS)
在这个依赖关系中,$(BACKEND)和$(LIBDEPS)在生成cc1.exe时已经生成,因此这个目标依赖于$(CXX_OBJS)和cc1plus-checksum.o。在这些目标生成后,这段脚本将它们链接为cc1plus.exe。
CXX_OBJS = cp/cp-lang.o stub-objc.o $(CXX_AND_OBJCXX_OBJS)
CXX_AND_OBJCXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o /
cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o /
cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o /
cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o /
cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o /
cp/cp-gimplify.o tree-mudflap.o $(CXX_C_OBJS)
在这里$(CXX_C_OBJS)定义了与cc1.exe共用的C文件,而这些文件在之前已经生成,因此可略过。
1.1.1.1 cp/cp-lang.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h /
$(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-cp.h /
$(DIAGNOSTIC_H) cp/cp-objcp-common.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.2 stub-objc.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) /
$(C_COMMON_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.3 cp/call.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /
$(EXPR_H) $(DIAGNOSTIC_H) intl.h gt-cp-call.h convert.h $(TARGET_H) langhooks.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.4 cp/decl.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h /
output.h $(EXPR_H) except.h toplev.h $(HASHTAB_H) $(RTL_H) /
cp/operators.def $(TM_P_H) $(TREE_INLINE_H) $(DIAGNOSTIC_H) $(C_PRAGMA_H) /
debug.h gt-cp-decl.h $(TIMEVAR_H) $(TREE_FLOW_H) $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.5 cp/expr.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) $(FLAGS_H) $(EXPR_H) /
toplev.h except.h $(TM_P_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.6 cp/pt.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h /
toplev.h $(RTL_H) except.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h /
vecprim.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.7 cp/typeck2.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h output.h /
$(TM_P_H) $(DIAGNOSTIC_H) gt-cp-typeck2.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.8 cp/class.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /
$(TARGET_H) convert.h $(CGRAPH_H) $(TREE_DUMP_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.9 cp/decl2.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h $(EXPR_H) /
output.h except.h toplev.h $(RTL_H) $(C_COMMON_H) gt-cp-decl2.h $(CGRAPH_H) /
$(C_PRAGMA_H) $(TREE_DUMP_H) intl.h $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.10 cp/error.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) /
$(FLAGS_H) $(REAL_H) $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.11 cp/lex.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) /
$(C_PRAGMA_H) toplev.h output.h input.h cp/operators.def $(TM_P_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.12 cp/parser.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) $(DIAGNOSTIC_H) gt-cp-parser.h /
output.h $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.13 cp/ptree.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(TM_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.14 cp/rtti.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h convert.h /
$(TARGET_H) $(C_PRAGMA_H) gt-cp-rtti.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.15 cp/typeck.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) /
toplev.h $(DIAGNOSTIC_H) convert.h $(C_COMMON_H) $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.16 cp/cvt.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h $(FLAGS_H) toplev.h /
convert.h $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.17 cp/except.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) except.h /
toplev.h cp/cfns.h $(EXPR_H) libfuncs.h $(TREE_INLINE_H) $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.18 cp/friend.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) toplev.h /
$(EXPR_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.19 cp/init.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) /
toplev.h except.h $(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.20 cp/method.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/method.o: cp/method.c $(CXX_TREE_H) $(TM_H) toplev.h $(RTL_H) $(EXPR_H) /
$(TM_P_H) $(TARGET_H) $(DIAGNOSTIC_H) gt-cp-method.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.21 cp/search.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.22 cp/semantics.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) except.h toplev.h /
$(FLAGS_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) /
$(TREE_INLINE_H) $(CGRAPH_H) $(TARGET_H) $(C_COMMON_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.23 cp/tree.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /
insn-config.h $(INTEGRATE_H) $(TREE_INLINE_H) $(REAL_H) gt-cp-tree.h /
$(TARGET_H) debug.h $(TREE_FLOW_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.24 cp/repo.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) /
gt-cp-repo.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.25 cp/dump.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) $(TREE_DUMP_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.26 cp/optimize.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h $(INTEGRATE_H) /
insn-config.h input.h $(PARAMS_H) debug.h $(TREE_INLINE_H) $(TREE_GIMPLE_H) /
$(TARGET_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.27 cp/mangle.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h $(REAL_H) /
gt-cp-mangle.h $(TARGET_H) $(TM_P_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.28 cp/cp-objcp-common.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/cp-objcp-common.o : cp/cp-objcp-common.c $(CONFIG_H) $(SYSTEM_H) /
coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) $(C_COMMON_H) toplev.h /
langhooks.h $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h /
$(CXX_PRETTY_PRINT_H) cp/cp-objcp-common.h gt-cp-cp-objcp-common.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.29 cp/name-lookup.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h /
$(TM_H) $(CXX_TREE_H) $(TIMEVAR_H) gt-cp-name-lookup.h toplev.h /
$(DIAGNOSTIC_H) $(FLAGS_H) debug.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.30 cp/cxx-pretty-print.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/cxx-pretty-print.o: cp/cxx-pretty-print.c $(CXX_PRETTY_PRINT_H) /
$(CONFIG_H) $(SYSTEM_H) $(TM_H) coretypes.h $(CXX_TREE_H)
由于所需要的目标都已经生成,直接编译即可。
1.1.1.31 cp/cp-gimplify.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h $(C_COMMON_H) /
$(TM_H) coretypes.h pointer-set.h
由于所需要的目标都已经生成,直接编译即可。
1.1.1.32 cc1plus-checksum.o
这个文件适用于通用规则:
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/
同时有下列依赖关系:
cc1plus-checksum.o : cc1plus-checksum.c
cc1plus-checksum.c : cc1plus-dummy$(exeext) build/genchecksum$(build_exeext)
build/genchecksum$(build_exeext) cc1plus-dummy$(exeext) > $@
cc1plus-dummy$(exeext): $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ /
$(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS)
所需要的几个目标都已经生成,从这几条规则可以看出它将首先生成cc1plus-dummy,然后再生成cc1plus-checksum.c,再编译为cc1plus-checksum.o。
1.1.1.33 $(BACKEND)
这个目标在生成cc1.exe时已经完成,略过。
1.1.1.34 $(LIBDEPS)
这个目标在生成cc1.exe时已经完成,略过。
参考资料
host-i686-pc-cygwin/libiberty/Makefile解析(2008-8-19)
host-i686-pc-cygwin/fixincludes/Makefile分析(2008-8-19)
host-i686-pc-cygwin/zlib/Makefile分析(2008-8-19)
host-i686-pc-cygwin/libcpp/Makefile分析(2008-8-19)
host-i686-pc-cygwin/libdecnumber/Makefile分析(2008-8-19)