包含make文件
include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include $(ACE_ROOT)/include/makeinclude/macros.GNU
include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU
include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
macros.GNU
#----------------------------------------------------------------------------
# macros.GNU,v 4.3 2003/11/21 13:18:00 dhinton Exp
# 局部和嵌套的目标定义
# Local and nested target definitions
#----------------------------------------------------------------------------
TARGETS_LOCAL = /
all.local /
debug.local /
profile.local /
optimize.local /
install.local /
deinstall.local /
clean_idl_stubs.local /
clean.local /
realclean.local /
clobber.local /
depend.local /
rcs_info.local /
idl_stubs.local
TARGETS_NESTED = /
$(TARGETS_LOCAL:.local=.nested)
rules.common
#----------------------------------------------------------------------------
# rules.common.GNU,v 4.3 2003/11/21 13:18:00 dhinton Exp
# 通用目标定义
# Common targets
#----------------------------------------------------------------------------
all: all.nested all.local
debug: debug.nested debug.local
profile: profile.nested profile.local
install: install.nested install.local
deinstall: deinstall.nested deinstall.local
clean_idl_stubs: clean_idl_stubs.nested clean_idl_stubs.local
clean: clean.nested clean.local
realclean: realclean.nested realclean.local
clobber: clobber.nested clobber.local
depend: depend.nested depend.local
rcs_info: rcs_info.nested rcs_info.local
idl_stubs: idl_stubs.nested idl_stubs.local
rules.nonested.GNU
#----------------------------------------------------------------------------
# rules.nonested.GNU,v 4.1 1996/10/25 15:46:58 levine Exp
# 空的的嵌套的目标
# Null nested targets
#----------------------------------------------------------------------------
$(TARGETS_NESTED):
rules.nested.GNU
#----------------------------------------------------------------------------
# rules.nested.GNU,v 4.17 2004/05/03 16:59:29 ossama Exp
# 嵌套的目录目标的makefile定义
# Nested directory targets makefile definitions
#----------------------------------------------------------------------------
# 如果你的makefile不叫Makefile, 在包括该文件前,MAKEFILE变量必须
# 设置实际的文件名,才能使使递归MAKE正常工作
MAKEFILE ?= GNUmakefile
SUBDIR_MAKEFILE ?= $(MAKEFILE)
# 确定我们编译的目录使用了DIRS列表而不是并行目录, 除非设置了
# DIRS_PARALLEL允许适当的标记或者禁止这种情况才能被并行的编译
DIRS_PARALLEL ?=
ifeq ($(DIRS_PARALLEL),)
.NOTPARALLEL:
endif
# 通过从DIR调用MAKE编译DIR.子目录的规则中,DIR作为一个新目录
# SUBDIR_TARGET 作为目标来编译, "GNUmakefile" 作为makefile
# 在新目录中使用.
# 由$(TARGETS_NESTED) 触发目标, below.
%.subdir: %
cd $< && $(MAKE) -f $(SUBDIR_MAKEFILE) $(SUBDIR_TARGET)
# 通过再次调用MAKE编译FOO.nested, 这次的DIRS (加到每个带有".子目录")
# 作为目标,用SUBDIR_TARGET变量下,传递FOO作为真实的目标来编译.
$(TARGETS_NESTED):
ifdef DIRS
ifneq ($(DIRS),)
$(MAKE) -f $(MAKEFILE) SUBDIR_TARGET=$(@:.nested=) $(addsuffix .subdir, $(DIRS))
endif # DIRS
endif # DIRS
#----------------------------------------------------------------------------
# rules.local.GNU,v 4.124 2006/03/06 18:28:51 elliott_c Exp
# 局部目标
# Local targets
# GNU version
# Requires GNU make 需要GNU的make
#----------------------------------------------------------------------------
#清空中间文件的目录,OBJ,BIN,LIB,SHLIB,TEMP
CLEANUP_OBJDIRS =
CLEANUP_DIRS =
ifdef CLEANUP_BIN
CLEANUP_OBJDIRS = $(VDIR)
else # ! CLEANUP_BIN
ifdef CLEANUP_LIB
CLEANUP_OBJDIRS = $(VDIR)
endif # CLEANUP_LIB
endif # CLEANUP_BIN
ifdef CLEANUP_SHLIB
CLEANUP_OBJDIRS += $(VSHDIR)
endif # CLEANUP_VSHLIB
ifdef TEMPINCDIR
CLEANUP_DIRS += $(TEMPINCDIR)
endif
#如果定义了SUN,情况目录加上SunWS_cache
ifdef sun
CLEANUP_DIRS += SunWS_cache
endif
vxworks_ntbuild ?= 0
#### TEMPLATE_REPOSITORY can be set in individual platform files
#### to create template repository directories. See
#### platform_sunos5_sunc++.GNU for an example.
ifdef TEMPLATE_REPOSITORY
CLEANUP_DIRS += $(TEMPLATE_REPOSITORY)
endif
#是否定义了mingw32,没有则显示GNUmakefile目标依赖的当前目录的$(MAKEFILE)
ifneq ($(mingw32),1)
makefile_name.local:
@echo
@echo GNUmakefile: $(shell pwd)/$(MAKEFILE) MAKEFLAGS=$(MAKEFLAGS)
@echo
else
makefile_name.local:
@echo
@echo GNUmakefile: $(call PWD)/$(MAKEFILE)
@echo
endif
all.local: makefile_name.local $(split_target) build.objdirs build.local install.local
#----------------------------------------------------------------------------
# C/C++ 编译目标
#----------------------------------------------------------------------------
IDL_SRC ?=
VLIBS ?=
BUILD ?=
BIN ?=
VBIN ?= $(BIN:%=%$(VAR))
ifneq ($(VBIN),)
$(VBIN): $(VLIBS)
endif
# Always build the V* targets in this order. We control assignment to them
# elsewhere. We add the existing $(BUILD) targets to the end to allow the
# caller to set additional ones, e.g., when defining multiple targets in a
# single makefile--note that we filter out any that are already present.
VBUILD = $(IDL_SRC) $(VLIBS) $(VBIN) $(filter-out $(IDL_SRC) $(VLIBS) $(VBIN), $(BUILD))
build.local: $(VBUILD)
# By setting SUFFIXES to nothing, we turn off all implicit rules, and force
# make to only use the explicit ones we define.
.SUFFIXES:
# C++ 相关目标
STATIC_LINK_FLAG ?=
static_link ?= 0
ifeq ($(static_link),1)
LDFLAGS += $(STATIC_LINK_FLAG)
endif # static_link = 1
OS ?=
$(VDIR)%.o: %.c $(VDIR)%.creation_stamp
$(COMPILE.c) $(CC_OUTPUT_FLAG) $@ $<
${MVCMD}
$(VDIR)%.o: %.cpp $(VDIR)%.creation_stamp
$(COMPILE.cc) $(CC_OUTPUT_FLAG) $@ $<
${MVCMD}
$(VDIR)%.o: %.C $(VDIR)%.creation_stamp
$(COMPILE.cc) $(CC_OUTPUT_FLAG) $@ $<
${MVCMD}
$(VDIR)%.o: %.cc $(VDIR)%.creation_stamp
$(COMPILE.cc) $(CC_OUTPUT_FLAG) $@ $<
${MVCMD}
$(VDIR)%.o: %.cxx $(VDIR)%.creation_stamp
$(COMPILE.cc) $(CC_OUTPUT_FLAG) $@ $<
${MVCMD}
ifneq (,$(COMPILE.rc))
$(VDIR)%.rc.o: %.rc $(VDIR)%.creation_stamp
$(COMPILE.rc) $< $@
${MVCMD}
endif # COMPILE.rc
# If SOLINK is defined, then the .$(SOEXT) file is built from the
# .$(OBJEXT) file via separate rules in the same directory.
# Otherwise, the .$(SOEXT) and .$(OBJEXT) are built via the same rule.
# SOLINK is required for the repository under gcc.
ifndef SOLINK
# I added the "Executable Shared Object (ESO)" define to separate between
# normal shared object files and executable shared object files (the kind
# that the service configurator needs to be able to function).
# 970104 Marius Kjeldahl <mariusk@sn.no, marius@funcom.com>
ifdef (ESOBUILD)
$(VSHDIR)%.$(SOEXT): %.cpp $(VSHDIR)%.creation_stamp
$(ESOBUILD)
else # ! ESOBUILD
$(VSHDIR)%.$(SOEXT): %.cpp $(VSHDIR)%.creation_stamp
$(SOBUILD)
endif # ESOBUILD
ifeq ($(split), 1)
$(VSHDIR)%.$(OBJEXT): %.cpp $(VSHDIR)%.creation_stamp
$(COMPILE.cc) $(PIC) SPLIT/`echo $< | sed "s/.cpp/_S/*/"`
mv *.$(OBJEXT) $(VSHDIR)
else # ! split
$(VSHDIR)%.$(OBJEXT): %.cpp $(VSHDIR)%.creation_stamp
$(COMPILE.cc) $(PIC) $(CC_OUTPUT_FLAG) $@ $<
endif # split
$(VSHDIR)%.$(OBJEXT): %.cc $(VSHDIR)%.creation_stamp
$(COMPILE.cc) $(PIC) $(CC_OUTPUT_FLAG) $@ $<
$(VSHDIR)%.$(OBJEXT): %.C $(VSHDIR)%.creation_stamp
$(COMPILE.cc) $(PIC) $(CC_OUTPUT_FLAG) $@ $<
$(VSHDIR)%.$(OBJEXT): %.cxx $(VSHDIR)%.creation_stamp
$(COMPILE.cc) $(PIC) $(CC_OUTPUT_FLAG) $@ $<
$(VSHDIR)%.$(OBJEXT): %.c $(VSHDIR)%.creation_stamp
$(COMPILE.c) $(PIC) $(CC_OUTPUT_FLAG) $@ $<
ifneq (,$(COMPILE.rc))
$(VSHDIR)%.rc.$(OBJEXT): %.rc $(VSHDIR)%.creation_stamp
$(COMPILE.rc) $< $@
endif # COMPILE.rc
$(VSHDIR)%.$(SOEXT): $(VSHDIR)%.$(OBJEXT) $(VSHDIR)%.creation_stamp
$(SOLINK)
endif # SOLINK
ifeq ($(vxworks_ntbuild),1)
$(VDIR)%.creation_stamp:
@if not exist $(dir $@) $(MKDIR) $(dir $@) $(ACE_NUL_STDERR)
@echo > $@
else
.PHONY: $(VDIR)%.creation_stamp
$(VDIR)%.creation_stamp:
@-test -d $(dir $@) || $(MKDIR) $(dir $@) $(ACE_NUL_STDERR)
endif
ifneq ($(VDIR),$(VSHDIR))
ifeq ($(vxworks_ntbuild),1)
$(VSHDIR)%.creation_stamp:
@if not exist $(dir $@) $(MKDIR) $(dir $@) $(ACE_NUL_STDERR)
@echo > $@
else
.PHONY: $(VSHDIR)%.creation_stamp
$(VSHDIR)%.creation_stamp:
@-test -d $(dir $@) || $(MKDIR) $(dir $@) $(ACE_NUL_STDERR)
endif
endif
#----------------------------------------------------------------------------
# Library 编译目标
#----------------------------------------------------------------------------
#### show_statics shows static objects in locally-created object files.
#### It assumes that the object files were built using g++.
#### TOOLENV selects the proper nm in VxWorks host environments.
#### TOOLDIR allows specification of the full path to nm via definition
#### in the platform_macros.GNU file.
show_statics:
-@$(TOOLDIR)nm$(TOOLENV) -Co $(VSHDIR)*o | /
egrep ' global destructors '; true
#### show_uninit shows uninitialized data in locally-created object files.
#### TOOLENV selects the proper nm in VxWorks host environments.
show_uninit:
-@$(TOOLDIR)nm$(TOOLENV) -Co $(VSHDIR)*o | egrep ' b '
#----------------------------------------------------------------------------
# Installation 安装目标
#----------------------------------------------------------------------------
# Always add LIB_INSTALL to INSTALL, so libs will get installed even no BIN
# is built. LIB_INSTALL is a dependency for BIN, so libs are installed prior
# to use. Also, make LIB_INSTALL depend on VLIBS, so libs get built prior to
# installation.
ifdef LIB_INSTALL
INSTALL ?= $(LIB_INSTALL)
$(LIB_INSTALL): $(VLIBS)
endif
INSTALL ?=
install.local: $(INSTALL)
deinstall.local:
ifdef CLEANUP_INSTALL
ifneq ($(CLEANUP_INSTALL),)
$(RM) $(CLEANUP_INSTALL)
endif # CLEANUP_INSTALL
endif # CLEANUP_INSTALL
ifndef LN_S
ifndef COMSPEC
ifdef ComSpec
#### ACE+TAO use COMSPEC, but ComSpec is defined.
COMSPEC = $(ComSpec)
endif # ComSpec
endif # ! COMPSPEC
ifdef COMSPEC
#### Assume we're on a WIN32 host.
LN_S = cp -p
else # ! WIN32
LN_S = ln -s
endif # ! WIN32
endif # ! LN_S
$(INSBIN)/%$(VAR)$(EXEEXT) /
$(INSINC)/ace% /
$(INSLIB)/% /
$(INSMAN)/man1/% /
$(INSMAN)/man2/% /
$(INSMAN)/man3/% /
$(INSMAN)/man4/% /
$(INSMAN)/man5/% /
$(INSMAN)/man6/% /
$(INSMAN)/man7/% /
$(INSMAN)/man8/% /
$(INSMAN)/manl/% /
$(INSMAN)/mann/% :
ifeq ($(vxworks_ntbuild),1)
@if exist $@ echo "$(@F) already installed"
@if not exist $@ echo "Installing $(@F:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)) to $(@D)" && /
$(RM) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)) && /
$(LN_S) $(shell pwd)/$(@F) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)) && /
echo "Installing $(@F) to $(@D)" && /
$(RM) $@ && /
$(LN_S) $(shell pwd)/$(@F) $@
else
ifneq ($(mingw32),1)
@if test $(shell pwd) != $(@D) -o -n "$(SOVERSION)" ; then /
if test -s $@ ; then /
echo "$(@F) already installed" ; /
else /
echo "Installing $(@F:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)) -> $(@D)" ; /
$(RM) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)); /
$(LN_S) $(shell pwd)/$(@F) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)); /
echo "Installing $(@F) -> $(@D)" ; /
$(RM) $@; /
$(LN_S) $(shell pwd)/$(@F) $@; /
fi ; /
fi
else
@if test $(call PWD) != $(@D) -o -n "$(SOVERSION)" ; then /
if test -s $@ ; then /
echo "$(@F) already installed" ; /
else /
echo "Installing $(@F:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)) -> $(@D)" ; /
$(RM) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)); /
$(LN_S) $(call PWD)/$(@F) $(@:%.$(SOEXT)$(SOVERSION)=%.$(SOEXT)); /
echo "Installing $(@F) -> $(@D)" ; /
$(RM) $@; /
$(LN_S) $(call PWD)/$(@F) $@; /
fi ; /
fi
endif
endif
ifdef MVSLIB
#special for MVS in order to use the .x files
@if test -w $(@D) ; then /
if test -s $(@:.$(SOEXT)=.x) ; then /
echo "$(@F:.$(SOEXT)=.x) already installed" ; /
else /
echo "Installing $(@F:.$(SOEXT)=.x) -> $(@D)" ; /
$(RM) $(@); $(LN_S) $(shell pwd)/$(@F:.$(SOEXT)=.x) $(@:.$(SOEXT)=.x) ; /
fi /
fi
endif
#----------------------------------------------------------------------------
# Cleanup targets 清除目标
#----------------------------------------------------------------------------
clean_idl_stubs.local: makefile_name.local
ifdef IDL_FILES
-$(RM) $(foreach ext, $(IDL_EXT), $(addsuffix $(ext), $(IDL_FILES)))
endif
CLEANUP_BIN ?=
ifneq ($(CLEANUP_BIN),)
DO_CLEANUP = 1
REALCLEAN_FILES = $(CLEANUP_BIN:%=%$(EXEEXT)) $(CLEANUP_BIN:%=%_debug$(EXEEXT)) $(CLEANUP_BIN:%=%_profile$(EXEEXT)) $(CLEANUP_BIN:%=%_optimize$(EXEEXT))
endif # !CLEANUP_BIN
ifdef static_libs
CLEANUP_LIB ?=
ifneq ($(CLEANUP_LIB),)
DO_CLEANUP = 1
REALCLEAN_FILES += $(CLEANUP_LIB:%=%) $(CLEANUP_LIB:%=%_debug) $(CLEANUP_LIB:%=%_profile) $(CLEANUP_LIB:%=%_optimize)
endif # !CLEANUP_LIB
endif # static_libs
ifdef shared_libs
CLEANUP_SHLIB ?=
ifneq ($(CLEANUP_SHLIB),)
DO_CLEANUP = 1
REALCLEAN_FILES += $(CLEANUP_VSHLIB:%=%) $(CLEANUP_VSHLIB_NO_VER:%=%*) $(CLEANUP_VSHLIB_NO_VER:%=%_debug) $(CLEANUP_VSHLIB_NO_VER:%=%_profile) $(CLEANUP_VSHLIB_NO_VER:%=%_optimize)
endif # !CLEANUP_SHLIB
endif # shared_libs
CLEANUP_OBJS += $(addsuffix .o, $(addprefix $(VDIR),$(CLEANUP_BIN)))
ifdef OBJS
CLEANUP_OBJS += $(addprefix $(VDIR), $(OBJS))
endif # OBJS
ifneq ($(CLEANUP_BIN),)
CLEANUP_OBJS += $(addsuffix .$(OBJEXT),$(addprefix $(VDIR),$(basename $(CLEANUP_BIN))))
endif # CLEANUP_BIN
ifdef VSHOBJS
CLEANUP_OBJS += $(VSHOBJS)
endif # VSHOBJS
clean.local: makefile_name.local
ifdef DO_CLEANUP
-$(RM) -r /
*.$(OBJEXT) *~ *.bak *.rpo *.sym lib*.*_pure_* /
GNUmakefile.old core-r $(CLEANUP_DIRS) /
cxx_repository ptrepository ti_files /
gcctemp.c gcctemp so_locations *.ics /
templateregistry templateregistry.* ir.out core.* *.core $(CLEANUP_OBJS)
endif # DO_CLEANUP
realclean.local: clean.local deinstall.local clean_idl_stubs.local
ifdef DO_CLEANUP
-$(RM) -r $(REALCLEAN_FILES) $(sort $(CLEANUP_OBJDIRS))
endif # DO_CLEANUP
#----------------------------------------------------------------------------
# Dependency generation target依赖目标
#----------------------------------------------------------------------------
MAKEFILE ?= GNUmakefile
DEPENDENCY_FILE ?= $(MAKEFILE)
TAO_ROOT ?= $(ACE_ROOT)/TAO
# 如不没有库在当前目录编译 (实际上, 如果没包含rules.lib.GNU),
# SOEXT就不会设置.
SOEXT ?= so
ORIGdepend.local: $(MAKEFILE)
@$(RM) $(MAKEFILE).old
@cp $(MAKEFILE) $(MAKEFILE).old
$(ACE_ROOT)/bin/g++dep -f $(MAKEFILE) $(CPPFLAGS) -DMAKEDEPEND $(LSRC) $(SRC) $(PSRC)
@cat $(MAKEFILE) | /
sed -e "s;$(TAO_ROOT);/$$(TAO_ROOT);g" /
-e "s;$(ACE_ROOT);/$$(ACE_ROOT);g" /
$(ACE_DEPEND_SED_CMD) /
-e '/$$(ACE_ROOT)//ace//config[^/.]*/.h/d' /
-e "s; /[-a-zA-Z0-9_./]*/.h;;g" /
-e "s;/([-a-zA-Z0-9._]*/)/.$(OBJEXT):;.obj//1.$(OBJEXT) .obj//1.$(SOEXT) $(VSHDIR)/1.$(OBJEXT) $(VSHDIR)/1.$(SOEXT):;" /
> $(MAKEFILE).new
@cat $(MAKEFILE).new >$(MAKEFILE)
@$(RM) $(MAKEFILE).new
@if cmp -s $(MAKEFILE) $(MAKEFILE).old ;/
then echo "GNUmakefile dependencies unchanged." ;/
else /
echo "GNUmakefile dependencies updated." ;/
fi ;/
$(RM) $(MAKEFILE).old ;
ifneq ($(MAKEFILE),$(DEPENDENCY_FILE))
$(DEPENDENCY_FILE):
ifeq ($(vxworks_ntbuild),1)
copy NUL "$(DEPENDENCY_FILE)"
else
touch $(DEPENDENCY_FILE)
endif
depend.local: $(DEPENDENCY_FILE)
-include $(DEPENDENCY_FILE)
endif
DEPGEN ?= $(ACE_ROOT)/bin/depgen.pl
# Use findstring just in case the script was preceded by /usr/bin/perl
ifeq ($(findstring depgen.pl, $(notdir $(DEPGEN))), depgen.pl)
DEPEND_CMD_ARGS += -i
ifeq ($(inline), 0)
DEPEND_CMD_ARGS += -n
endif
endif
depend.local: $(MAKEFILE) idl_stubs.local
@$(RM) $(DEPENDENCY_FILE).old
@cp $(DEPENDENCY_FILE) $(DEPENDENCY_FILE).old
ACE_PLATFORM_CONFIG=$(ACE_PLATFORM_CONFIG) /
ACE_DEPEND_SED_CMD="$(ACE_DEPEND_SED_CMD)" /
$(DEPGEN) -A $(DEPEND_CMD_ARGS) -e config.h -f $(DEPENDENCY_FILE) $(CPPFLAGS) /
-DMAKEDEPEND $(CCFLAGS) $(LSRC) $(SRC) $(PSRC)
@if cmp -s $(DEPENDENCY_FILE) $(DEPENDENCY_FILE).old ;/
then echo "GNUmakefile dependencies unchanged." ;/
else /
echo "GNUmakefile dependencies updated." ;/
fi ;/
$(RM) $(DEPENDENCY_FILE).old ;
#----------------------------------------------------------------------------
# RCS info target
#----------------------------------------------------------------------------
IDL_FILES ?=
IDL_CLIENT_HDR_EXT ?=
idl_stubs.local: $(foreach file, $(IDL_FILES), $(file)$(IDL_CLIENT_HDR_EXT))
ifdef $(TAO_IDL_DEP)
$(TAO_IDL_DEP):
@if test ! -s $(TAO_IDL_DEP); then /
echo " ***"; /
echo " *** ERROR: $(TAO_IDL_DEP) not found."; /
echo " ***"; /
echo; /bin/false; fi
endif # TAO_IDL_DEP
#----------------------------------------------------------------------------
# RCS info target
#----------------------------------------------------------------------------
rcs_info.local:
@rcs info
#----------------------------------------------------------------------------
# Variant targets and conditional macros
#----------------------------------------------------------------------------
build.objdirs: $(CLEANUP_DIRS)
ifeq ($(MKDIR_NTSTYLE),1)
$(CLEANUP_DIRS):
@if not exist $@ $(MKDIR) $@ $(ACE_NUL_STDERR)
else
$(CLEANUP_DIRS):
@test -d $@ || $(MKDIR) $@ $(ACE_NUL_STDERR)
endif
#---------------------------------------------------------------------------
# Source file splitting
#---------------------------------------------------------------------------
SPLIT:
@echo "Splitting source files..."
@$(ACE_ROOT)/bin/split-cpp -s Svc_Conf_l.cpp -s Svc_Conf_y.cpp $(LSRC)
@echo "done."
rules.lib.GNU
#---------------------------------------------------------------------------
# Library versioning库版本
#---------------------------------------------------------------------------
# 是否定义了versioned_so的版本
ifeq ($(versioned_so),1)
# Turn on symbol versioning. The scheme that we follow is to allow
# applications dependent on libraries, with same version numbers (major,
# minor and beta) to run, but applications with dependencies on libraries
# with different minor or major or beta versions to fail.
#
# Version number of the libraries
# 定义库版本,由ACE版本号组成
ifeq ($(SOVERSION),)
SOVERSION = .$(ACE_MAJOR_VERSION).$(ACE_MINOR_VERSION).$(ACE_BETA_VERSION)
endif # SOVERSION
# Name that will be written into the dynamic library
# 写到动态库的名称
ifeq ($(SONAME),)
SONAME = $(SHLIB)$(SOVERSION)
endif # SONAME
endif # versioned_so
#----------------------------------------------------------------------------
# 下面的目标安排编译共享非共享的库
#----------------------------------------------------------------------------
LIB ?=
VLIB = $(LIB:%.$(LIBEXT)=%$(VAR).$(LIBEXT))
CLEANUP_VLIB = $(CLEANUP_LIB:%.$(LIBEXT)=%$(VAR).$(LIBEXT))
# Add VLIB to VLIBS if building static_libs.
ifdef static_libs
VLIBS += $(VLIB)
endif
SHLIB ?=
# Setup shared library variables, including versions.
VSHLIB_NO_VER = $(SHLIB:%.$(SOEXT)=%$(VAR).$(SOEXT))
CLEANUP_VSHLIB_NO_VER = $(CLEANUP_SHLIB:%.$(SOEXT)=%$(VAR).$(SOEXT))
VSHLIB = $(VSHLIB_NO_VER:%=%$(SOVERSION))
CLEANUP_VSHLIB = $(CLEANUP_VSHLIB_NO_VER:%=%$(SOVERSION))
SHLIBA ?=
VSHLIBA = $(SHLIBA:%.$(LIBEXT)=%$(VAR).$(LIBEXT))
# Add VSHLIB if we're building shared_libs.
ifdef shared_libs
VLIBS += $(VSHLIB) $(VSHLIBA)
endif
# Warn if no libs found
ifeq ($(VLIBS),)
LIB_WARNING = 0
ifndef LIB_UNCHECKED
LIB_WARNING = 1
endif # !LIB_CHECKED
ifndef SHLIB_UNCHECKED
LIB_WARNING = 1
endif # !SHLIB_UNCHECKED
ifeq ($(LIB_WARNING),1)
@echo Warning: rules.lib.GNU included, but no library targets detected.
endif # LIB_WARNING
else # VLIBS
# Libraries always depend on idl_stubs, if they exist.
IDL_SRC ?=
ifeq ($(IDL_SRC),)
$(VLIBS): $(IDL_SRC)
endif # IDL_SRC
endif # !VLIBS
VLOBJS = $(addprefix $(VDIR),$(foreach var, $(addsuffix .$(OBJEXT), $(basename $(LSRC)) $(RESOURCES)), $(if $(findstring ../,$(var)),$(notdir $(var)),$(var))))
ifdef LSRC2
LSRC += $(LSRC2)
endif
VSHOBJS = $(addprefix $(VSHDIR),$(foreach var, $(addsuffix .$(OBJEXT), $(basename $(LSRC)) $(RESOURCES)), $(if $(findstring ../,$(var)),$(notdir $(var)),$(var))))
ifneq ($(IDL_SRC),)
$(VLOBJS) $(VSHOBJS): $(IDL_SRC)
endif
ifdef static_libs
LIB_INSTALL += $(VLIB:%=$(INSLIB)/%)
CLEANUP_INSTALL += $(CLEANUP_VLIB:%=$(INSLIB)/%)
endif # static_libs
ifdef shared_libs
LIB_INSTALL += $(VSHLIB:%=$(INSLIB)/%)
CLEANUP_INSTALL += $(CLEANUP_VSHLIB:%=$(INSLIB)/%)
CLEANUP_INSTALL += $(CLEANUP_VSHLIB_NO_VER:%=$(INSLIB)/%*)
ifdef SHLIBA
LIB_INSTALL += $(VSHLIBA:%=$(INSLIB)/%)
CLEANUP_INSTALL += $(CLEANUP_SHLIBA:%=$(INSLIB)/%)
endif
endif # shared_libs
ace_lib_prelink ?= 0
aix_build ?= 0
$(VLIB): $(VLOBJS)
ifeq (1,$(repo))
ifneq (,$(ACELIB))
#### With repo, link in all of the ace object files to the lib.
#### This avoids multiple instantiations. We haven't found it to
#### be necessary with shared libs, so just do it for static libs.
vpath %.$(OBJEXT) $(ACE_ROOT)/ace/$(VDIR)
$(VLIB): $(ACE_ROOT)/ace/$(VDIR)*.$(OBJEXT)
endif # ! ACELIB
endif # repo
ifdef PRELIB
$(PRELIB)
endif
ifeq (1,$(ace_lib_prelink))
#### Attempt a link (which will fail), to add template instantiations
#### to lib files, for example.
ifeq (1,$(VXWORKS))
#### In VxWorks builds we would like to see the output here.
-$(LINK.cc) $(LINK_OUTPUT_FLAG) ace-templ_inst $? $(LDFLAGS)
else
-$(LINK.cc) $(LINK_OUTPUT_FLAG) ace-templ_inst $? $(LDFLAGS) $(ACE_NUL_STDERR)
endif
endif # ace_lib_prelink
echo $(TMPINCDIR:%=%/*.o) $(filter %.o, $?) | xargs $(AR) $(ARFLAGS) $@ $(AREXTRA)
ifdef ibmcxx_build
# This is required to get AIX IBM C/C++ to instantiate and compile the needed
# templates.
if test -s ./$(TEMPINCDIR)/*.C; /
then /
$(LINK.cc) $(LINK_OUTPUT_FLAG) dummy $(LDFLAGS) $(ACE_ROOT)/etc/xlc_dummy.cpp $^ $(ACE_SHLIBS) $(LIBS); /
$(RM) dummy; /
$(AR) $(ARFLAGS) $@ $(TEMPINCDIR)/*.$(OBJEXT); /
fi
endif
-chmod a+r $@
ifneq (,$(RANLIB))
-$(RANLIB) $@
endif # RANLIB
# Note that if you don't want to build shared libraries, just remove the
# $(VSHOBJS)
#
# The AIX shr.o build is out here to keep it away from the SOVERSION stuff.
# The SOVERSION transform is applied after building the library file.
ifeq (1,$(aix_build))
shr.o: $(VSHOBJS)
$(SHR_FILTER) $(SOLINK.cc) $(SO_OUTPUT_FLAG) $@ $^ $(LDFLAGS) $(ACE_SHLIBS) $(LIBS)
.INTERMEDIATE: shr.o
endif # aix_build
ifeq ($(VXWORKSLINK),true)
$(VSHLIB): $(basename $(notdir $(PRJ_FILE))).out
-$(RM) $@
-$(LN_S) $(PROJECT_OUT) $@
-$(POST_BUILD_RULE)
else # !VXWORKSLINK
ifeq (1,$(aix_build))
$(VSHLIB): shr.o
$(AR) $(ARFLAGS) $@ $?
ifneq (,$(RANLIB))
-$(RANLIB) $@
endif # RANLIB
else # ! aix_build
$(VSHLIB): $(VSHOBJS)
ifdef PRELIB
$(PRELIB)
endif # PRELIB
ifdef ibmcxx_build
# This is required to get AIX IBM C/C++ to instantiate and compile the needed
# templates before building the library.
if test -s ./$(TEMPINCDIR)/*.C; /
then /
$(LINK.cc) $(LINK_OUTPUT_FLAG) dummy $(LDFLAGS) $(ACE_ROOT)/etc/xlc_dummy.cpp $^ $(ACE_SHLIBS) $(LIBS); /
$(RM) dummy; /
fi
endif # ibmcxx_build
ifdef SHLIBBUILD
$(SHLIBBUILD)
else # ! SHLIBBUILD
ifdef ibmcxx_build
if test -s ./$(TEMPINCDIR)/*.$(OBJEXT); /
then /
$(SOLINK.cc) $(SO_OUTPUT_FLAG) $@ $^ $(TEMPINCDIR)/*.$(OBJEXT) $(LDFLAGS) $(ACE_SHLIBS) $(LIBS); /
else /
$(SOLINK.cc) $(SO_OUTPUT_FLAG) $@ $^ $(LDFLAGS) $(ACE_SHLIBS) $(LIBS); /
fi
else # !ibmcxx_build
ifdef kylix
$(SOLINK.cc) $(LDFLAGS) $^, $@,, $(ACE_SHLIBS) $(LIBS) $(BORINITSHAREDOBJ)
else # ! kylix
ifeq (1,$(ace_lib_prelink))
#### Attempt a link (which will fail), to add template instantiations
#### to lib files, for example.
-$(LINK.cc) $(LINK_OUTPUT_FLAG) ace-templ_inst $^ $(LDFLAGS) $(ACE_NUL_STDERR)
endif # ace_lib_prelink
ifeq ($(split),1)
$(SHR_FILTER) $(SOLINK.cc) $(SO_OUTPUT_FLAG) $@ $(VSHDIR)/*.$(OBJEXT) $(LDFLAGS) $(ACE_SHLIBS) $(LIBS)
else # ! split
$(SHR_FILTER) $(SOLINK.cc) $(SO_OUTPUT_FLAG) $@ $^ $(LDFLAGS) $(ACE_SHLIBS) $(LIBS)
endif # split
endif # kylix
endif # ibmcxx_build
endif # SHLIBBUILD
endif # aix_build
endif # VXWORKSLINK
ifneq ($(SOVERSION),)
-$(RM) $(VSHLIB_NO_VER)
-$(LN_S) $@ $(VSHLIB_NO_VER)
endif
-chmod a+rx $@
wrapper_macros.GNU
ACE支持下面的标记.他们可以运行在命令行使用.如 “make purify=1”,或者添加到你的platform_macros.GNU文件中.要禁止这些选项,设置该标记值为空. 如”make debug=”.一些标记支持设置0为禁止.如”make debug=0”. Debug=1在发布ACE的platform文件上是允许.
请注意每个标记在特定平台上的影响.某个标记的组合可能或许在特定的平台上不允许. Debug=1 opt=1在g++上是支持的,但是在其他平台上未必支持.
Flag标记 Description描述
------------------------------------------------------------------------
ace_for_tao 编译”ace_for_tao”子集. 减少TAO使用ACE共享库的大小
debug 允许调试;参看DCFLAGS和DCCFLAGS
dmalloc 指示使用dmalloc编译,添加FLATFORM_DMALLOC_CPPFLAGS到CPPFLAGS,添加FLATFORM_DMALLOC_LDFLAGS到LDFLAGS,添加PLATFORM_DMALLOC_LIBS到LIBS,更多信息请查看http://dmalloc.com
exceptions 允许异常处理(不支持所有平台).
fast 允许-fast选项,在SUN C++上
inclue_env 允许CORBA::Environment参数使用,这兼容TAO1.2.2之前的版本,缺省设置是不允许的,与exception=0一起编译也没有影响.
inline 允许ACE内嵌,一些平台缺省支持内嵌inline,一些则不支持.如果platform_macros.GNU里不设置,那么inline是允许的.
minimum_corba 允许最小化CORBA支持(这里定义,但是在TAO/rules.TAO.GUN没有实现)
mtrace 指示与mtrace一起编译,添加FLAFORM_MTRACE_CPPFLAGS到CPPFLAGS,Mtrace是GNU libc的扩展
optimize 允许优化,看OCFLAGS和OCCFLAGS
probe 允许ACE_Timeprobes
profile 允许profiling,看PCFLAGS和PCCFLAGS
purify purify的可执行程序,purify必须在PATH,
quantify quantify的可执行程序, quantify必须在PATH,
repo 使用GNU的模板仓库(只在g++的repo和egcs补丁下有用)
shared_libs 运行运行时RTTI类型识别,缺省是允许的
static_libs 编译静态库,如果static_libs_only设置则忽略
shared_libs_only 编译共享库,如果share_libs_only设置则忽略
static_libs_only 只是编译共享库,如果SHLIB设置则忽略
static_link 只链接静态库到可执行文件
templates 执行模版类型实例化
threads 编译线程支持
trio 编译ace_for_tao子集
xt 编译Xt(X11 Toolkit)支持
fl 编译FlTK(Fast Light Toolkit)支持
tk 编译Tk (Tcl/Tk)支持
qt 编译Qt (Trolltech Qt)支持
ssl 编译OpenSSL支持
rapi 编译RAPI支持
stlport 编译STLPort支持
rwho 编译rwho支持
pipes 编译pipe支持
spli 编译FlTK(Fast Light Toolkit)支持
sctp 编译TAO SCIOP 和ACE SCTP支持
versioned_so 添加库版本,缺省1(true),如果0, 共享库名没有附加版本号.
wfmo 编译wfmo支持,只支持win32
winregistry 编译winwos的注册标支持
通常,用户不需要注意make的目标文件.只需要敲如”make”在命令行就可以编译.一些值得注意的目标如下列出.
Target目标 描述
------------------------------------------------------------------------
show_statics
show_uninit
下面描述ACE包装好的宏定义
# 变量 描述
# -------- -----------
# ARFLAGS 使用归档ar工具的标记
# CC C 编译器的命令
# CXX C++ 编译器命令
# RC 资源编译器命令
# COMPILE.c 与C编译器使用的标记
# COMPILE.cc 与C++编译器使用的标记
# COMPILE.rc 与资源编译器使用的标记
# CPPFLAGS C 预先处理标记
# CFLAGS C 编译标记
# CCFLAGS C++编译标记
# DCFLAGS C调试编译标记
# DCCFLAGS C++ 调试编译标记
# DEFFLAGS C++ 定义的符号预处理标记
# DLD 动态连接器名
# LD 链接器名
# IDL CORBA IDL编译器名
# TEMPLATES_FLAG 传递到编译器控制模版实例化标记
# INSBIN 二进制(可执行)文件的安装目录
# INSINC Include目录的安装路径
# INSMAN man文件安装目录
# INSLIB 库文件的安装目录
# LDFLAGS ld 链接器标记
# LINK.c 与C链接器使用的标记
# LINK.cc 与C++链接器使用的标记
# MAKEFLAGS 从命令行传递到编译器标记
# OCFLAGS 优化C编译标记
# OCCFLAGS 优化C+编译标记
# PCFLAGS C的profiling标记
# PCCFLAGS C++的profiling标记
# PLATFORM_XT_CPPFLAGS
# X11的CPP选项 (一些需要-I...)
# PLATFORM_XT_LDFLAGS
# X11的LD选项 (一些需要-L...)
# PLATFORM_XT_LIBS
# X11的库标记
# PLATFORM_SSL_CPPFLAGS
# OpenSSL 的CPP 标记 (一些需要-I...)
# PLATFORM_SSL_LDFLAGS
# OpenSSL 的LD标记(一些需要-I...)
# PLATFORM_SSL_LIBS
# OpenSSL的库标记
# PLATFORM_RAPI_CPPFLAGS
# RAPI的CPP标记
# PLATFORM_RAPI_LDFLAGS
# RAPI的LD标记
# PLATFORM_RAPI_LIBS
# RAPI的库标记
# PLATFORM_SCTP_CPPFLAGS
# SCTP的CPP标记
# PLATFORM_SCTP_LDFLAGS
# SCTP的LD标记
# PLATFORM_SCTP_LIBS
# SCTP的库标记
# PRELINK 可执行的预链接, 如quantify
# PURELINK 如果设置包含purify 可作为选项执行
# PURE_CACHE_BASE_DIR
# Pure目录。如果你不想在/tmp下,环境变量中或者make中设置
# PURE_CACHE_DIR
# Purecache目录
# PWD 当前工作目录
# PTDIRS 模版代码的目录
# RM 删除文件的命令
# ACE_MKDIR 递归创建目录的命令
# SOFLAGS 编译共享库的标记
# SOLINK.cc 编译共享库的需要链接行
# VAR Variant identifier suffix
# VDIR object code目录
# VSHDIR 共享object code目录
# ACE_ROOT ACE的根目录
#
#----------------------------------------------------------------------------
# 平台依赖的宏定义
# (链接到相应的特定平台配置文件).
#----------------------------------------------------------------------------
#定义BIN (BIN2)可执行文件和CLEANUP_BIN清除可执行文件宏
BIN_UNCHECKED ?=
CLEANUP_BIN ?=
ifdef BIN
CLEANUP_BIN = $(BIN)
endif # !BIN
ifdef BIN2
CLEANUP_BIN += $(BIN2)
endif # !BIN2
ifneq ($(BIN_UNCHECKED),)
CLEANUP_BIN += $(BIN_UNCHECKED)
endif # !BIN_UNCHECKED
#定义LIB (LIB 2)库文件和CLEANUP_LIB清除库文件宏
LIB_UNCHECKED ?=
CLEANUP_LIB ?=
ifdef LIB
CLEANUP_LIB = $(LIB)
endif # !LIB
ifdef LIB2
CLEANUP_LIB += $(LIB2)
endif # !LIB2
ifneq ($(LIB_UNCHECKED),)
CLEANUP_LIB = $(LIB_UNCHECKED)
endif # !LIB_UNCHECKED
#定义SHLIB (SHLIB 2)共享库文件和CLEANUP_LIB清除共享库文件宏
SHLIB_UNCHECKED ?=
CLEANUP_SHLIB ?=
ifdef SHLIB
CLEANUP_SHLIB = $(SHLIB)
endif # !SHLIB
ifdef SHLIB2
CLEANUP_SHLIB += $(SHLIB2)
endif # SHLIB2
ifneq ($(SHLIB_UNCHECKED),)
CLEANUP_SHLIB += $(SHLIB_UNCHECKED)
endif # ! SHLIB_UNCHECKED
#定义SHLIBA (SHLIBA2)共享a库文件和CLEANUP_LIB清除共享a库文件宏
SHLIBA_UNCHECKED ?=
CLEANUP_SHLIBA ?=
ifdef SHLIBA
CLEANUP_SHLIBA = $(SHLIBA)
endif # SHLIBA
ifdef SHLIBA2
CLEANUP_SHLIBA = $(SHLIBA2)
endif # SHLIB2A
ifneq ($(SHLIBA_UNCHECKED),)
CLEANUP_SHLIBA = $(SHLIBA_UNCHECKED)
endif # SHLIBA_UNCHECKED
#判断是否定义shared_libs 缺省只编译共享库. 这里设置是给平台有机会修改
ifndef shared_libs
shared_libs = 1
endif # shared_libs
ifndef static_libs
static_libs = 0
endif # static_libs
# 设置platform_macros.GNU中需要编译ACE的版本.
ifeq (cmd,$(findstring cmd,$(SHELL)))
ACE_MAJOR_VERSION := $(shell awk "/ACE_MAJOR_VERSION/ { print $$3}" ${ACE_ROOT}/ace/Version.h)
ACE_MINOR_VERSION := $(shell awk "/ACE_MINOR_VERSION/ { print $$3}" ${ACE_ROOT}/ace/Version.h)
ACE_BETA_VERSION := $(shell awk "/ACE_BETA_VERSION/ { print $$3}" ${ACE_ROOT}/ace/Version.h)
else
ACE_MAJOR_VERSION := $(shell awk '/ACE_MAJOR_VERSION/ { print $$3}' ${ACE_ROOT}/ace/Version.h)
ACE_MINOR_VERSION := $(shell awk '/ACE_MINOR_VERSION/ { print $$3}' ${ACE_ROOT}/ace/Version.h)
ACE_BETA_VERSION := $(shell awk '/ACE_BETA_VERSION/ { print $$3}' ${ACE_ROOT}/ace/Version.h)
endif
# 定义安静编译警告变量
SHR_FILTER ?=
# 包含platform_macros.GNU 文件使得上述变量有个缺省值
include $(ACE_ROOT)/include/makeinclude/platform_macros.GNU
# 定义安静编译警告变量
GHS ?=
CHORUS ?=
AIX_TEMPLATE_HACK ?=
# $(ACE_PLATFORM_CONFIG) 是用于包含在config.h依赖规则和相应平台依赖文件config-*.h, # 它可以设置在你的platform_*.GNU 文件或者platform_macros.GNU.
ACE_PLATFORM_CONFIG ?= config.h
# 判断是否定义threads线程宏
ifeq ($(threads),0)
ifneq ($(findstring -DACE_MT_SAFE=0,$(CPPFLAGS)),-DACE_MT_SAFE=0)
CPPFLAGS += -DACE_MT_SAFE=0
endif # -DACE_MT_SAFE=0
endif # threads
# 缺省设置异常,快速off,RTTI,版本
#exceptions on (1), fast off (0), rtti on (1), versioned_so on (1).
exceptions ?= 1
fast ?= 0
rtti ?= 1
versioned_so ?= 1
use_dep_libs ?= 1
SOVERSION ?=
SONAME ?=
#当前工作目录,和目录路径创建命令
ifeq ($(PWD),)
PWD=$(shell pwd)
endif
ifeq ($(ACE_MKDIR),)
MKDIR = mkdir -p
else
MKDIR = $(ACE_MKDIR)
Endif
#----------------------------------------------------------------------------
# 平台依赖宏定义
#----------------------------------------------------------------------------
INCLDIRS ?=
DEFFLAGS ?=
CPPFLAGS += $(DEFFLAGS) $(INCLDIRS)
# 定义IDL编译产生的扩展文件名
IDL_CLIENT_HDR_EXT ?= C.h
IDL_CLIENT_INL_EXT ?= C.inl
IDL_CLIENT_SRC_EXT ?= C.cpp
IDL_SERVER_HDR_EXT ?= S.h
IDL_SERVER_INL_EXT ?= S.inl
IDL_SERVER_SRC_EXT ?= S.cpp
IDL_SERVER_THDR_EXT ?= S_T.h
IDL_SERVER_TINL_EXT ?= S_T.inl
IDL_SERVER_TSRC_EXT ?= S_T.cpp
#定义ACE的ace,lib,man安装目录
ifeq (,$(findstring -I$(ACE_ROOT),$(INCLDIRS)))
INCLDIRS += -I$(ACE_ROOT)
endif
INSINC ?= $(ACE_ROOT)/ace
INSLIB ?= $(ACE_ROOT)/lib
INSMAN ?= $(ACE_ROOT)/man
#链接库标记宏
ifeq (,$(findstring -L$(ACE_ROOT)/ace,$(LDFLAGS)))
LDFLAGS += -L$(ACE_ROOT)/ace -L./
endif
ifeq (default,$(origin LEX))
LEX = flex
endif
EXEEXT ?=
ifndef COMSPEC
ifdef ComSpec
#### ACE+TAO use COMSPEC, but ComSpec is defined.
COMSPEC = $(ComSpec)
endif # ComSpec
endif # ! COMPSPEC
ifdef COMSPEC
#### Assume we're on a WIN32 host.
ACE_NUL = nul
else # ! WIN32
ACE_NUL = /dev/null
endif # ! WIN32
#### 重定义stderr to nul device, and mask exit status.
ACE_NUL_STDERR = 2>$(ACE_NUL) || true
PCFLAGS += #### set in platform_macros.GNU file, e.g., -p
PCCFLAGS += #### set in platform_macros.GNU file, e.g., -p
VAR
# 编译中间文件路径定,用户可以自己定义
VDIR ?= .obj/
VSHDIR ?= .shobj/
# ACE共享库名定义
ACELIB ?= -lACE
# NOTE: VLDLIBS is defined below, in case it is overridden for static-
# or shared-only builds.
ifeq (default,$(origin YACC))
YACC = bison
Endif
#----------------------------------------------------------------------------
# platform_macros.GNU中平台依赖宏定义.
#----------------------------------------------------------------------------
#判断ACE_HAS_GNUG_PRE_2_8定义
ifeq ($(findstring g++,$(CXX)),g++)
ifndef ACE_HAS_GNUG_PRE_2_8
ACE_HAS_GNUG_PRE_2_8 := /
$(shell /
if $(CXX) -dumpversion 2>/dev/null | egrep '^(cygnus-)?2/.[0-7]' /
>/dev/null; then echo 1; else echo 0; fi)
endif # ! ACE_HAS_GNUG_PRE_2_8
endif # g++
# OBJ,SO,LIB,后缀名定义
OBJEXT ?= o
SOEXT ?= so
LIBEXT ?= a
CC_OUTPUT_FLAG ?= -o
SO_OUTPUT_FLAG ?= -o
LINK_OUTPUT_FLAG ?= -o
#----------------------------------------------------------------------------
# make flags 传为make命令的参数在文件开始的定义中有注释
#----------------------------------------------------------------------------
#是否优化
ifeq ($(optimize),0)
override optimize =
endif # optimize
ifneq ($(optimize),)
CFLAGS += $(OCFLAGS)
CCFLAGS += $(OCCFLAGS)
endif # optimize
# 是否split
split ?= 0
ifeq ($(split),0)
override split =
endif # split
ifneq ($(split),)
override split_target = SPLIT
override debug = 0
CPPFLAGS += -DACE_IS_SPLITTING
else
override split_target =
endif # split
#是否调试
ifeq ($(debug),0)
override debug =
endif # debug
ifeq ($(debug),)
CPPFLAGS += -DACE_NDEBUG
# Disable the RCSID for release/non-debug builds.
ifeq (,$(findstring ACE_USE_RCSID,$(CPPFLAGS)))
CPPFLAGS += -DACE_USE_RCSID=0
endif
else
CFLAGS += $(DCFLAGS)
CCFLAGS += $(DCCFLAGS)
endif # debug
#线程标记
ifeq ($(threads),0)
override threads =
endif # threads
# ace_for_tao 子集缺省是禁止的.
ace_for_tao ?=
ifeq ($(ace_for_tao),0)
override ace_for_tao =
endif # ace_for_tao
ifneq ($(ace_for_tao),)
ACE_MAKE_OPTIONS += ace_for_tao
endif # ace_for_tao
#下面是一些关于图形库一些API库的判断
ifeq ($(xt),0)
override xt =
endif # xt
ifneq ($(xt),)
override x11=1
override xt=1
override ace_xtreactor=1
override tao_xtresource=1
ACE_MAKE_OPTIONS += xt
endif # xt
fl ?=
ifeq ($(fl),0)
override fl =
endif # fl
ifneq ($(fl),)
override x11=1
override gl=1
override ace_flreactor=1
override tao_flresource=1
ACE_MAKE_OPTIONS += fl
endif # fl
tk ?=
ifeq ($(tk),0)
override tk =
endif # tk
ifneq ($(tk),)
override x11=1
override tk=1
override ace_tkreactor=1
override tao_tkresource=1
ACE_MAKE_OPTIONS += tk
endif # tk
qt ?=
ifeq ($(qt),0)
override qt =
endif # qt
ifneq ($(qt),)
override qt=1
override ace_qtreactor=1
override tao_qtresource=1
ACE_MAKE_OPTIONS += qt
endif # qt
gtk_reactor ?=
ifeq ($(gtk_reactor),0)
override gtk_reactor =
endif # gtk_reactor
ifneq ($(gtk_reactor),)
override ace_with_gtk=1
CPPFLAGS += -DACE_HAS_GTK $(PLATFORM_GTK_CPPFLAGS)
LIBS += $(PLATFORM_GTK_LIBS)
LDFLAGS += $(PLATFORM_GTK_LDFLAGS)
ACE_MAKE_OPTIONS += gtk_reactor
endif # gtk_reactor
QTDIR ?=
ifneq ($(QTDIR),)
MOC = ${QTDIR}/bin/moc
else
MOC = moc
endif
rapi ?=
ifeq ($(rapi),0)
override rapi =
endif #rapi
ifneq ($(rapi),)
CPPFLAGS += -DACE_HAS_RAPI $(PLATFORM_RAPI_CPPFLAGS)
LIBS += $(PLATFORM_RAPI_LIBS)
LDFLAGS += $(PLATFORM_RAPI_LDFLAGS)
ACE_MAKE_OPTIONS += rapi
endif # rapi
sctp ?=
ifeq ($(sctp),0)
override sctp =
endif #rapi
# if any sctp implementation is present then add
ifneq ($(sctp),)
CPPFLAGS += -DACE_HAS_SCTP $(PLATFORM_SCTP_CPPFLAGS)
LDFLAGS += $(PLATFORM_SCTP_LDFLAGS)
LIBS += $(PLATFORM_SCTP_LIBS)
ACE_MAKE_OPTIONS += sctp
endif
gl ?=
ifeq ($(gl),0)
override gl =
endif # gl
ifneq ($(gl),)
ACE_MAKE_OPTIONS += gl
endif # gl
ssl ?=
ifeq ($(ssl),0)
override ssl =
else
ifneq ($(SSL_ROOT),)
# Don't do a thing..
else
CPPFLAGS += $(PLATFORM_SSL_CPPFLAGS)
LDFLAGS += $(PLATFORM_SSL_LDFLAGS)
LIBS += $(PLATFORM_SSL_LIBS)
ACE_MAKE_OPTIONS += ssl
endif
endif
ec_typed_events ?= 1
#判断异常处理变量
ifeq ($(exceptions),0)
ifeq ($(ACE_HAS_GNUG_PRE_2_8),0)
#### Disable the default exception handling of g++ >= 2.8.0.
ifneq ($(ACE_GNUG_ON_UNIXWARE),)
CCFLAGS += -fcheck-new
else
CCFLAGS += -fno-exceptions -fcheck-new
endif # ! ACE_GNUG_ON_UNIXWARE
endif # ! ACE_HAS_GNUG_PRE_2_8
else # exceptions
CPPFLAGS += -DACE_HAS_EXCEPTIONS
ifndef include_env
include_env ?=
endif
ifeq ($(include_env),1)
CPPFLAGS += -DACE_ENV_BKWD_COMPAT
endif
ifeq ($(ACE_HAS_GNUG_PRE_2_8),1)
#### Enable exception handling with g++ < 2.8.0. Not recommended,
#### but provided here for completeness.
CCFLAGS += -fhandle-exceptions
# else # ! ACE_HAS_GNUG_PRE_2_8
# ifeq ($(ACE_HAS_GNUG_PRE_2_8),0)
# #### Disable this warning on g++ >= 2.8.0 if exceptions are enabled,
# #### it gets confused and reports too many bogus warnings.
# CCFLAGS += -Wno-uninitialized
# endif # g++ > 2.8.0
endif # ! ACE_HAS_GNUG_PRE_2_8
ACE_MAKE_OPTIONS += exceptions
endif # exceptions
# profile宏定义
profile ?=
ifeq ($(profile),0)
override profile =
endif # profile
ifneq ($(profile),)
CFLAGS += $(PCFLAGS)
CCFLAGS += $(PCCFLAGS)
endif # profile
# inline宏定义
inline ?= 1
ifeq ($(inline),0)
CPPFLAGS += -DACE_NO_INLINE
else
ifeq ($(inline),1)
CPPFLAGS += -D__ACE_INLINE__
endif # inline eq 1
endif # inline eq 0
# shared_libs宏定义
ifeq ($(shared_libs),0)
override shared_libs =
endif # shared_libs
ifeq ($(static_libs),0)
override static_libs =
endif # static_libs
shared_libs_only ?=
ifeq ($(shared_libs_only),0)
override shared_libs_only =
endif # shared_libs_only
static_libs_only ?=
ifeq ($(static_libs_only),0)
override static_libs_only =
endif # static_libs_only
ifdef shared_libs_only
override shared_libs = 1
override static_libs =
endif # shared_libs_only
ifdef static_libs_only
override shared_libs =
override static_libs = 1
endif # static_libs_only
ifdef shared_libs
ifndef static_libs
override shared_libs_only = 1
endif
ACE_MAKE_OPTIONS += shared_libs
endif
ifdef static_libs
ifndef shared_libs
override static_libs_only = 1
endif
ACE_MAKE_OPTIONS += static_libs
endif
ACE_SHLIBS ?=
ifdef shared_libs
ifdef SHLIBA
LDLIBS := $(LDLIBS:-l%=-l%shr)
ACE_SHLIBS := $(ACE_SHLIBS:-l%=-l%shr)
endif # SHLIBA
else # ! shared_libs
ifdef static_libs
#### Don't build shared libs.
PIC =
SHLIB =
SOEXT = o
VSHDIR = $(VDIR)
VLDLIBS = $(LDLIBS:%.so=%.o)
endif # static_libs
endif # shared_libs
ifdef kylix
LDLIBS := $(LDLIBS:-l%=lib%.$(SOEXT))
LIBS := $(LIBS:-l%=lib%.$(SOEXT))
ACELIB := $(ACELIB:-l%=lib%.$(SOEXT))
ACE_SHLIBS := $(ACE_SHLIBS:-l%=lib%.$(SOEXT))
endif # kylix
VLDLIBS = $(LDLIBS) $(ACELIB) $(LIBS)
# 程序检查的工具如purify,quantify,repo等宏定义
probe ?=
ifeq ($(probe),0)
override probe =
endif # probe
ifeq ($(probe),1)
CPPFLAGS += -DACE_COMPILE_TIMEPROBES
endif # probe
purify ?=
ifeq ($(purify),0)
override purify =
endif # purify
ifdef purify
PURE_CACHE_BASE_DIR = /tmp/purifycache
PURE_CACHE_DIR = $(PURE_CACHE_BASE_DIR)-$(LOGNAME)-$(notdir $(CXX) )
#### Pick up Purify directory from the users PATH.
ACE_PURIFY_DIR := /
$(shell type purify | sed -e 's/.* is //' -e 's%/purify$$%%')
#### You might want to adjust the Purify options below.
#### -best-effort is undocumented but supported, and seems
#### to help avoid occasional link failure.
PURELINK += purify -best-effort -cache-dir=$(PURE_CACHE_DIR) /
-chain-length=20 -fds-inuse-at-exit=no /
-inuse-at-exit -max_threads=100
CPPFLAGS += -DACE_HAS_PURIFY -I$(ACE_PURIFY_DIR)
endif # purify
quantify ?=
ifeq ($(quantify),0)
override quantify =
endif # quantify
ifdef quantify
#### Pick up Quantify directory from the users PATH.
ACE_QUANTIFY_DIR := /
$(shell type quantify | sed -e 's/.* is //' -e 's%/quantify$$%%')
#### You might want to adjust the Quantify options below.
#### -best-effort is undocumented but supported, and seems
#### to help avoid occasional link failure.
PRELINK += quantify -best-effort -cache-dir=$(PURE_CACHE_DIR) /
-max_threads=100
CPPFLAGS += -DACE_HAS_QUANTIFY -I$(ACE_QUANTIFY_DIR)
ifeq ($(shell uname -p),sparc)
PRELINK += -record-register-window-traps
endif # sparc
endif # quantify
repo ?=
ifeq ($(repo),0)
override repo =
endif # repo
ifdef repo
#### Remove -fno-implicit-templates from, and add -frepo to, CCFLAGS.
CCFLAGS := $(strip $(subst -fno-implicit-templates,,$(CCFLAGS)))
CCFLAGS += -frepo
CPPFLAGS += -DACE_HAS_GNU_REPO
# ace_lib_prelink := 1
endif # repo
# If pipes is not set, we default to 0
pipes ?= 0
# If pipes is set to 1 then add the compiler flag -pipe. This uses pipe instead
# of intermediate files. This can be disabled by setting pipes to 0 in the
# platform_macros.GNU file.
ifeq ($(pipes),1)
CFLAGS += -pipe
endif # pipes
# RMCast缺省是开着
rmcast ?= 1
ifeq ($(rmcast),1)
ACE_MAKE_OPTIONS += rmcast
endif
# If not explicitly is set that we don't have rwho, assume we have it.
rwho ?= 1
# stlport支持宏定义
# If not explicitly is set that we don't have stlport, assume we
# don't have it.
stlport ?= 0
ifeq ($(stlport),1)
CPPFLAGS += -DACE_HAS_STLPORT $(PLATFORM_STLPORT_CPPFLAGS)
LDFLAGS += $(PLATFORM_STLPORT_LDFLAGS)
LIBS += $(PLATFORM_STLPORT_LIBS)
endif
# If not explicitly is set that we have wfmo, assume we don't have it.
wfmo ?= 0
# If not explicitly is set that we have winregistry, assume we don't have it.
winregistry ?= 0
# In MPC, these are now features that are enabled by default.
ace_other ?= 1
ace_codecs ?= 1
ace_token ?= 1
ace_svcconf ?= 1
ace_uuid ?= 1
ace_filecache ?= 1
acexml ?= 1
xerces ?= 1
#----------------------------------------------------------------------------
# 条件宏定义
#----------------------------------------------------------------------------
PTDIRS ?=
PRELINK ?=
POSTLINK ?=
PURELINK ?=
TEMPLATES_FLAG ?=
MVCMD ?=
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
COMPILE.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS) -c
RC ?=
COMPILE.rc = $(RC) $(RCFLAGS)
COMPILE-NO_DASH_G.cc = `echo $(COMPILE.cc) | sed 's/-g //'`
# 960905 Marius Kjeldahl <marius@funcom.com>
# Added the line below to be used for compiling executable shared objects
COMPILEESO.cc = $(CXX) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS)
ifeq ($(LINK.c),override)
LINK.c = $(LINK.c.override)
else
LINK.c = $(PURELINK) $(PRELINK) $(LD) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) /
$(LDLIBS) $(LIBS)
endif # LINK.c.override
ifeq ($(LINK.cc),override)
LINK.cc = $(LINK.cc.override)
else
LINK.cc = $(PURELINK) $(PRELINK) $(LD) $(CCFLAGS) $(CPPFLAGS) $(PTDIRS)
endif # LINK.cc.override
SOLINK.cc = $(PRELINK) $(DLD) $(SOFLAGS)
ACE build on linux
[root@FC7 ace]# pwd
/root/ACE_wrappers/ace
[root@FC7 ace]# vi config.h
1 #include "ace/config-linux.h"
config-linux.h里面包含了config-linux-common.h头文件.
[root@FC7 makeinclude]# pwd
/root/ACE_wrappers/include/makeinclude
[root@FC7 makeinclude]# vi platform_macros.GNU
platform_linux.GNU
Gateway' makefile
root@FC7 Gateway]# make
make[1]: Entering directory `/root/ACE_wrappers/apps/Gateway/Gateway'
GNUmakefile: /root/ACE_wrappers/apps/Gateway/Gateway/GNUmakefile.Gateway MAKEFLAGS=w
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Concrete_Connection_Handlers.o Concrete_Connection_Handlers.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Config_Files.o Config_Files.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/File_Parser.o File_Parser.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Gateway.o Gateway.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Event_Channel.o Event_Channel.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Event_Forwarding_Discriminator.o Event_Forwarding_Discriminator.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Options.o Options.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Connection_Handler.o Connection_Handler.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Connection_Handler_Acceptor.o Connection_Handler_Acceptor.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Connection_Handler_Connector.o Connection_Handler_Connector.cpp
g++ -Wl,-O3 -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -shared -Wl,-h -Wl,libGateway.so.5.6.0 -o libGateway.so.5.6.0 .shobj/Concrete_Connection_Handlers.o .shobj/Config_Files.o .shobj/File_Parser.o .shobj/Gateway.o .shobj/Event_Channel.o .shobj/Event_Forwarding_Discriminator.o .shobj/Options.o .shobj/Connection_Handler.o .shobj/Connection_Handler_Acceptor.o .shobj/Connection_Handler_Connector.o -Wl,-E -L/root/ACE_wrappers/ace -L./ -L../../../lib -L. -L../../../lib -lACE -ldl -lpthread -lrt
rm -f libGateway.so
ln -s libGateway.so.5.6.0 libGateway.so
chmod a+rx libGateway.so.5.6.0
make[1]: Leaving directory `/root/ACE_wrappers/apps/Gateway/Gateway'
make[1]: Entering directory `/root/ACE_wrappers/apps/Gateway/Gateway'
GNUmakefile: /root/ACE_wrappers/apps/Gateway/Gateway/GNUmakefile.gatewayd MAKEFLAGS=w
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -o .obj/gatewayd.o gatewayd.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -Wl,-E -L/root/ACE_wrappers/ace -L./ -L/root/ACE_wrappers/lib -L. -L../../../lib -o gatewayd .obj/gatewayd.o -lGateway -lACE -ldl -lpthread -lrt
make[1]: Leaving directory `/root/ACE_wrappers/apps/Gateway/Gateway'
make[1]: Entering directory `/root/ACE_wrappers/apps/Gateway/Peer'
GNUmakefile: /root/ACE_wrappers/apps/Gateway/Peer/GNUmakefile.Gateway_Peer MAKEFLAGS=w
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Options.o Options.cpp
g++ -fvisibility=hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS=1 -W -Wall -Wpointer-arith -O3 -g -pipe -pipe -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -c -fPIC -o .shobj/Peer.o Peer.cpp
g++ -Wl,-O3 -DACE_HAS_LINUX_NPTL -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I/root/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I../../.. -shared -Wl,-h -Wl,libGateway_Peer.so.5.6.0 -o libGateway_Peer.so.5.6.0 .shobj/Options.o .shobj/Peer.o -Wl,-E -L/root/ACE_wrappers/ace -L./ -L../../../lib -L. -L../../../lib -lACE -ldl -lpthread -lrt
rm -f libGateway_Peer.so
ln -s libGateway_Peer.so.5.6.0 libGateway_Peer.so
chmod a+rx libGateway_Peer.so.5.6.0
make[1]: Leaving directory `/root/ACE_wrappers/apps/Gateway/Peer'
make[1]: Entering directory `/root/ACE_wrappers/apps/Gateway/Peer'