包含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 ” . D ebug=1在发布ACE的 platform 文件上是允许.
请注意每个标记在特定平台上的影响.某个标记的组合可能或许在特定的平台上不允许. D ebug=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
# Pure cache目录
# 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
# 定义SH LIB ( SH LIB 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
# 定义SH LIB A ( SH LIBA2) 共享 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./
e ndif
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'