实例分析makefile

 

今天学习了一下Makefile,由于没有搞清楚makefile的执行过程差点又崩溃了,呵呵。

 

   我学些的是firedrill的makefile,开始觉得其好“智能”,其实并不十分智能。

 

先看一下目录结构:

 

 

   httptunnel---config

                   |

                   ---docs

                  |

                   ---src----libhttpun----------------------    1.c,1.h

                          |                                              |

                           -----main.cc                             -----  2.c, 2.h                

                          |                                              |

                           -----Makefile                            ------Makefile

                                                                         |

                                                                          ----

 

 

我们先看一下src下面的Makefile:

# (C) 2005 Richard Mills / The Linux Academy Ltd.
#
# Makefile for HTTPTunnel
#
# $Id: Makefile.HTTPTUNNEL,v 1.36 2009-04-03 11:46:17 rich Exp $

#############
# Global bits
#############
#定义的变量
SHELL=			/bin/sh
OS=				$(shell uname -s)
CC=				g++
SVRAUTH=			FILE
SSL=				NO
NAME=				HTTPTUNNEL

LIBDIRS=			libhttptun
APPOBJS=			main.o


# Default auth settings
AUTHLIBS=

# Default SSL settings
SSLLIBS=
SSLKEY=
SSLCERT=
SSLDEPENDS=


# Server authentication settings
ifeq ($(SVRAUTH),DB)
AUTHLIBS=		-lmysqlpp
endif

# SSL settings
ifeq ($(SSL),YES)
SSLKEY=			SSLKey.pem
SSLCERT=			SSLCert.pem
SSLDEPENDS=		$(SSLKEY) $(SSLCERT)
endif


# Application name
TUNLIBNAME=		libhttptun/libhttptun.a
FDSNAME=			Firedrill
FDANAME=			firedrill
HTSNAME=			HTTPTunnel
HTANAME=			httptunnel
ifeq ($(NAME),FIREDRILL)
NAMEFLAGS=		-DSTRNAME=\"${FDSNAME}\"
APPNAME=			$(FDANAME)
else
NAMEFLAGS=		-DSTRNAME=\"${HTSNAME}\"
APPNAME=			$(HTANAME)
endif


# Build objects
TUNAPPOBJS=		$(APPOBJS)
GLOBALLIBS=		-lpthread


# Linux specific
ifeq ($(findstring Linux,$(OS)),Linux)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Solaris specific
ifeq ($(findstring SunOS,$(OS)),SunOS)
ifeq ($(SSL),YES)
SSLLIBS=			-L/usr/local/ssl/lib -lssl -lcrypto -ldl
endif
PLATFORMLIBS=	$(SSLLIBS) -lsocket -lnsl -lrt
endif

# Mac OS X specific
ifeq ($(findstring Darwin,$(OS)),Darwin)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Cygwin specific
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
ifeq ($(SSL),YES)
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif


# Includes & compile flags
VERSION=			1.3.2
INCLUDES=		-I. -I./libhttptun
#DEBUGCFLAGS=	-g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS
#DEBUGCFLAGS=	-g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS
#DEBUGCFLAGS=	-g -DDEBUG_TUN
DEBUGCFLAGS=	-g
GLOBALCFLAGS=	-Wall -DVERSION=\"$(VERSION)\" $(NAMEFLAGS) $(DEBUGCFLAGS)
CCFLAGS=			$(GLOBALCFLAGS) $(INCLUDES)
LIBS=				$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)

# Dependencies
GLOBALDEPS=		Makefile
TUNAPPDEPENDS=	$(patsubst %.o,%.d,$(TUNAPPOBJS))
DEPENDS=			$(TUNAPPDEPENDS) $(TSTAPPDEPENDS)


#############
# Build rules
#############
#makefile程序执行的入口
# Top level
.PHONY:	all   #表明all并不是真正的文件,是个指令
all:	depend libdirs $(APPNAME) $(SSLDEPENDS)
#all 这个指令依赖 后来4个文件,或者伪指令,$(**)表示的是文件,depend,libdirs可以
#从后面判断是伪指令。

# Dependencies
include $(DEPENDS)

%.d:	%.cc
	@echo -- makedepend $@
	@bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \
		[ -s $(*F).d ] || rm -f $(*F).d '; \
		exit_status=$$? ; \
	if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi

.PHONY:	depend      #表明depend是伪指令
depend:	$(DEPENDS)
	echo 'depend    \n'

# SSL
$(SSLKEY):
	openssl genrsa -out $(SSLKEY) 1024

$(SSLCERT):	$(SSLKEY)
	openssl req -new -x509 -key $(SSLKEY) -batch -subj /O=TheLinuxAcademy \
	-out $(SSLCERT)


# Library
.PHONY:	libdirs $(LIBDIRS)  #libdirs,$(LIBDIRS)都是伪指令
libdirs:	$(LIBDIRS)
	echo 'libdirs   \n'
	
	
$(LIBDIRS):
	 echo 'LIBDIRS  \n'
	  $(MAKE) -C $@


# Application
$(APPNAME):	$(TUNAPPOBJS) libdirs
	echo '222222\n'
	$(CC) -o $(APPNAME) $(TUNAPPOBJS) $(TUNLIBNAME) $(LIBS)
	echo '333333\n'

%.o:	%.cc $(GLOBALDEPS)
	echo 'aaaaaaa  \n'
	$(CC) -c $(CCFLAGS) $*.cc
	echo 'bbbbbb  \n'

####################
# Other useful rules
####################

.PHONY:	clean
clean:
	cd libhttptun && $(MAKE) clean
	rm -f $(APPNAME) *.o *.d core* *.pem
 

    首先从定义变量,然后从all:那里执行,结果依赖depend,libdirs等,那就先执行depend标号后面的语句,

 

    输出:depend

 

    然后libdirs标号后面执行,libdirs又依赖$(LIBDIRS)标号,就跳到$(LIBDIRS)标号后面的语句执行:输出:

 

   echo 'LIBDIRS  \n'

 

    $(MAKE) -C $@

 

    跳到了libhttpun目录下,这个红色语句表明,执行这个目录下的makefile。

 

   这就行堆栈一样,一层层执行,先进入,后回溯,呵呵。

 

 

   我们也贴出libhttpun目录下的makefile欣赏一下:

 

   # (C) 2008 Richard Mills / The Linux Academy Ltd.

#
# Makefile for libhttptun
#
# $Id: Makefile.RELEASE,v 1.2 2009-03-20 11:52:25 rich Exp $

#############
# Global bits
#############

SHELL=			/bin/sh
OS=				$(shell uname -s)
CC=				g++
AR=				ar
SVRAUTH=			FILE
SSL=				NO

LIBOBJS=			HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o \
					Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o \
					ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o \
					Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o \
					TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o \
					Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o \
					RawWriter.o HTTPWriter.o Connection.o RawConnection.o \
					DummyRawConnection.o SOCKSConnection.o HTTPConnection.o \
					HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o \
					MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o \
					Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o \
					MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o \
					ClientSideConfig.o ServerSideConfig.o ProxySettings.o \
					TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o \
					ClientAuthenticator.o ServerAuthenticator.o \
					DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o \
					ServerAuthSettings.o User.o Quotas.o ConnectionManager.o \
					ConnectProxy.o EventReceiver.o IdentifyEvent.o \
					Event.o ConnectResultEvent.o ShutdownTunnelEvent.o \
					TunnelDestroyedEvent.o \
					ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o \
					TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o \
					RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o \
					SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o \
					ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o \
					TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o \
					LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o \
					NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o \
					ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o \
					SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o \
					TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o \
					UDPSockTunClient.o SockTunCallback.o SockTunHandle.o \
					ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o \
					ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.o

CLIOBJS=			testcli.o
SVROBJS=			testsvr.o


# Default auth settings
AUTHOBJS=
AUTHLIBS=
AUTHINCLUDES=
AUTHFLAGS=

# Default SSL settings
SSLLIBS=
SSLINCLUDES=
SSLFLAGS=


# Server authentication settings
ifeq ($(SVRAUTH),DB)
AUTHOBJS=		DBServerAuthenticator.o DBUserDetails.o
AUTHLIBS=		-lmysqlpp
AUTHINCLUDES=	-I/usr/include/mysql -I/usr/include/mysql++
AUTHFLAGS=		-DAUTH_DB
endif

ifeq ($(SVRAUTH),FILE)
AUTHOBJS=		FileServerAuthenticator.o
AUTHFLAGS=		-DAUTH_FILE
endif

# SSL settings
ifeq ($(SSL),YES)
SSLFLAGS=		-DUSE_SSL
endif


# Application name
TUNLIBNAME=		libhttptun.a
APPCLINAME=		testcli
APPSVRNAME=		testsvr


# Build objects
TUNLIBOBJS=		$(LIBOBJS) $(AUTHOBJS)
APPCLIOBJS=		$(CLIOBJS)
APPSVROBJS=		$(SVROBJS)
GLOBALLIBS=		-lpthread


# Linux specific
ifeq ($(findstring Linux,$(OS)),Linux)
PLATFORMNAME=	LINUX
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Solaris specific
ifeq ($(findstring SunOS,$(OS)),SunOS)
PLATFORMNAME=	SOLARIS
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/local/ssl/include/openssl -I/usr/local/ssl/include
SSLLIBS=			-L/usr/local/ssl/lib -lssl -lcrypto -ldl
endif
PLATFORMLIBS=	$(SSLLIBS) -lsocket -lnsl -lrt
endif

# Mac OS X specific
ifeq ($(findstring Darwin,$(OS)),Darwin)
PLATFORMNAME=	OSX
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif

# Cygwin specific
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
PLATFORMNAME=	CYGWIN
ifeq ($(SSL),YES)
SSLINCLUDES=	-I/usr/include/openssl
SSLLIBS=			-lssl -lcrypto
endif
PLATFORMLIBS=	$(SSLLIBS)
endif


# Includes & compile flags
VERSION=			1.3.2
PLATFORM=		-DPLATFORM_$(PLATFORMNAME) -DPLATNAME=\"$(PLATFORMNAME)\"
INCLUDES=		-I. $(SSLINCLUDES) $(AUTHINCLUDES)
#DEBUGCFLAGS=	-g -DDEBUG_TUN -DDEBUG_LOG_DATA -DDEBUG_THREADS -DDEBUG_EVENTS
#DEBUGCFLAGS=	-g -DDEBUG_TUN -DDEBUG_HTTP_MSG_LOSS
#DEBUGCFLAGS=	-g -DDEBUG_TUN
DEBUGCFLAGS=	-g
GLOBALCFLAGS=	-Wall -DLIBVERSION=\"$(VERSION)\" $(PLATFORM) $(DEBUGCFLAGS) \
					$(AUTHFLAGS) $(SSLFLAGS)
CCFLAGS=			$(GLOBALCFLAGS) $(INCLUDES)
LIBS=				$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)

# Dependencies
GLOBALDEPS=		Makefile
TUNLIBDEPENDS=	$(patsubst %.o,%.d,$(TUNLIBOBJS))
APPCLIDEPENDS=	$(patsubst %.o,%.d,$(APPCLIOBJS))
APPSVRDEPENDS=	$(patsubst %.o,%.d,$(APPSVROBJS))
DEPENDS=			$(TUNLIBDEPENDS) $(APPCLIDEPENDS) $(APPSVRDEPENDS)


#############
# Build rules
#############

# Top level
.PHONY:	all
all:	depend $(TUNLIBNAME)

# Dependencies
include $(DEPENDS)

%.d:	%.cc
	@echo -- makedepend $@
	@bash -c '$(CC) $(CCFLAGS) -M $(<F) >$(*F).d; \
		[ -s $(*F).d ] || rm -f $(*F).d '; \
		exit_status=$$? ; \
	if [ $${exit_status} -ne 0 ]; then exit $${exit_status}; fi

.PHONY:	depend
depend:	$(DEPENDS)

# Library
$(TUNLIBNAME):	$(TUNLIBOBJS)
	$(AR) -r $(TUNLIBNAME) $(TUNLIBOBJS)

# Test applications
.PHONY:	test
test:	$(APPCLINAME) $(APPSVRNAME) $(TUNLIBNAME)

$(APPCLINAME):	$(CLIOBJS) $(TUNLIBNAME)
	$(CC) -o $(APPCLINAME) $(CLIOBJS) $(TUNLIBNAME) $(LIBS)

$(APPSVRNAME):	$(APPSVROBJS) $(TUNLIBNAME)
	$(CC) -o $(APPSVRNAME) $(APPSVROBJS) $(TUNLIBNAME) $(LIBS)

%.o:	%.cc $(GLOBALDEPS)
	$(CC) -c $(CCFLAGS) $*.cc


####################
# Other useful rules
####################

.PHONY:	clean
clean:
	rm -f $(TUNLIBNAME) $(APPCLINAME) $(APPSVRNAME) *.o *.d
 

 

    最后的执行结果是这样的:

 

   -- makedepend main.d

echo 'depend    \n'
depend    

echo 'LIBDIRS  \n'
LIBDIRS  

make -C libhttptun
make[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun'
-- makedepend testsvr.d
-- makedepend testcli.d
-- makedepend FileServerAuthenticator.d
-- makedepend ConditionVar.d
-- makedepend MutexVar.d
-- makedepend Mutex.d
-- makedepend Callback.d
-- makedepend Thread.d
-- makedepend ThreadManager.d
-- makedepend AddrInfo.d
-- makedepend ServerSockTunHandle.d
-- makedepend ClientSockTunHandle.d
-- makedepend SockTunHandle.d
-- makedepend SockTunCallback.d
-- makedepend UDPSockTunClient.d
-- makedepend TCPSockTunClient.d
-- makedepend UDPSockTunServer.d
-- makedepend TCPSockTunServer.d
-- makedepend SockTunServer.d
-- makedepend SockTunClient.d
-- makedepend SockTunServerConfigBlob.d
-- makedepend SockTunClientConfigBlob.d
-- makedepend ServerConfigBlob.d
-- makedepend ClientConfigBlob.d
-- makedepend GlobalConfigBlob.d
-- makedepend ConfigBlob.d
-- makedepend SecurityBuff.d
-- makedepend NTLM.d
-- makedepend AuthSuccessEvent.d
-- makedepend NewTunnelParmsEvent.d
-- makedepend LaunchServerTestEvent.d
-- makedepend FlushConnectionEvent.d
-- makedepend UDPSilentEvent.d
-- makedepend TunnelManagementEvent.d
-- makedepend AuditEvent.d
-- makedepend ConnectionManagementEvent.d
-- makedepend ConnectionStateEvent.d
-- makedepend TunnelStateEvent.d
-- makedepend LeakTunnelErrorEvent.d
-- makedepend SendMsgEvent.d
-- makedepend CheckAckEvent.d
-- makedepend PollTimeoutEvent.d
-- makedepend RawDataArrivedEvent.d
-- makedepend ConnectEvent.d
-- makedepend TimedEvent.d
-- makedepend MsgArrivedEvent.d
-- makedepend TunnelUnviableEvent.d
-- makedepend ConnectionErrorEvent.d
-- makedepend ReadEvent.d
-- makedepend ShutdownConnectionEvent.d
-- makedepend TunnelDestroyedEvent.d
-- makedepend ShutdownTunnelEvent.d
-- makedepend ConnectResultEvent.d
-- makedepend Event.d
-- makedepend IdentifyEvent.d
-- makedepend EventReceiver.d
-- makedepend ConnectProxy.d
-- makedepend ConnectionManager.d
-- makedepend Quotas.d
-- makedepend User.d
-- makedepend ServerAuthSettings.d
-- makedepend AuthSettings.d
-- makedepend AuthDigest.d
-- makedepend DefaultServerAuthenticator.d
-- makedepend ServerAuthenticator.d
-- makedepend ClientAuthenticator.d
-- makedepend Authenticator.d
-- makedepend TunnelerID.d
-- makedepend TunnelID.d
-- makedepend TunnelConfig.d
-- makedepend ProxySettings.d
-- makedepend ServerSideConfig.d
-- makedepend ClientSideConfig.d
-- makedepend SideConfig.d
-- makedepend GlobalConfig.d
-- makedepend OptionsParser.d
-- makedepend DES.d
-- makedepend MD4.d
-- makedepend MD5.d
-- makedepend Firewall.d
-- makedepend SeqNo.d
-- makedepend URLCode.d
-- makedepend Time.d
-- makedepend Utils.d
-- makedepend RawBuff.d
-- makedepend Payload.d
-- makedepend TunnelStats.d
-- makedepend AutoPtr.d
-- makedepend ErrorMsgParms.d
-- makedepend HTTPMsgParms.d
-- makedepend MsgParms.d
-- makedepend HTTPGetMsg.d
-- makedepend HTTPResponseMsg.d
-- makedepend HTTPRequestMsg.d
-- makedepend HTTPMsg.d
-- makedepend HTTPConnection.d
-- makedepend SOCKSConnection.d
-- makedepend DummyRawConnection.d
-- makedepend RawConnection.d
-- makedepend Connection.d
-- makedepend HTTPWriter.d
-- makedepend RawWriter.d
-- makedepend Writer.d
-- makedepend HTTPReader.d
-- makedepend SOCKSReader.d
-- makedepend RawReader.d
-- makedepend Reader.d
-- makedepend TuneSettings.d
-- makedepend ServerTunnelParms.d
-- makedepend ClientTunnelParms.d
-- makedepend TunnelParms.d
-- makedepend ServerTunneler.d
-- makedepend SOCKSClientTunneler.d
-- makedepend ClientTunneler.d
-- makedepend Tunneler.d
-- makedepend TestServerTunnel.d
-- makedepend ServerTunnel.d
-- makedepend TestClientTunnel.d
-- makedepend ClientTunnel.d
-- makedepend TestTunnel.d
-- makedepend Tunnel.d
-- makedepend SSLSock.d
-- makedepend UDPSock.d
-- makedepend TCPSock.d
-- makedepend Sock.d
-- makedepend ServerServer.d
-- makedepend ClientServer.d
-- makedepend Server.d
-- makedepend Logger.d
-- makedepend HTTPTunneler.d
make[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun'
make[1]: Entering directory `/home/bardwu/bard/httptunnel/src/libhttptun'
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Logger.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Server.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Sock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SSLSock.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestClientTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TestServerTunnel.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Tunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSClientTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunneler.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientTunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerTunnelParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TuneSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Reader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPReader.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Writer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawWriter.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPWriter.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Connection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DummyRawConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SOCKSConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPConnection.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPRequestMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPResponseMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPGetMsg.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   HTTPMsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ErrorMsgParms.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AutoPtr.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStats.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Payload.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawBuff.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Utils.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Time.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   URLCode.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SeqNo.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Firewall.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD5.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MD4.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DES.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   OptionsParser.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSideConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ProxySettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelConfig.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelID.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelerID.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Authenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   DefaultServerAuthenticator.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthDigest.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerAuthSettings.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   User.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Quotas.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManager.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectProxy.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   EventReceiver.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   IdentifyEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Event.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectResultEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownTunnelEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelDestroyedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ShutdownConnectionEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ReadEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionErrorEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelUnviableEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MsgArrivedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TimedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   RawDataArrivedEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   PollTimeoutEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   CheckAckEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SendMsgEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LeakTunnelErrorEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelStateEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionStateEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConnectionManagementEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuditEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TunnelManagementEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSilentEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FlushConnectionEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   LaunchServerTestEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NewTunnelParmsEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AuthSuccessEvent.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   NTLM.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SecurityBuff.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   GlobalConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClientConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServerConfigBlob.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunServer.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   TCPSockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   UDPSockTunClient.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunCallback.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   SockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ClientSockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ServerSockTunHandle.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   AddrInfo.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ThreadManager.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Thread.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Callback.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   Mutex.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   MutexVar.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   ConditionVar.cc
g++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE  -I.   FileServerAuthenticator.cc
ar -r libhttptun.a HTTPTunneler.o Logger.o Server.o ClientServer.o ServerServer.o Sock.o TCPSock.o UDPSock.o SSLSock.o Tunnel.o TestTunnel.o ClientTunnel.o TestClientTunnel.o ServerTunnel.o TestServerTunnel.o Tunneler.o ClientTunneler.o SOCKSClientTunneler.o ServerTunneler.o TunnelParms.o ClientTunnelParms.o ServerTunnelParms.o TuneSettings.o Reader.o RawReader.o SOCKSReader.o HTTPReader.o Writer.o RawWriter.o HTTPWriter.o Connection.o RawConnection.o DummyRawConnection.o SOCKSConnection.o HTTPConnection.o HTTPMsg.o HTTPRequestMsg.o HTTPResponseMsg.o HTTPGetMsg.o MsgParms.o HTTPMsgParms.o ErrorMsgParms.o AutoPtr.o TunnelStats.o Payload.o RawBuff.o Utils.o Time.o URLCode.o SeqNo.o Firewall.o MD5.o MD4.o DES.o OptionsParser.o GlobalConfig.o SideConfig.o ClientSideConfig.o ServerSideConfig.o ProxySettings.o TunnelConfig.o TunnelID.o TunnelerID.o Authenticator.o ClientAuthenticator.o ServerAuthenticator.o DefaultServerAuthenticator.o AuthDigest.o AuthSettings.o ServerAuthSettings.o User.o Quotas.o ConnectionManager.o ConnectProxy.o EventReceiver.o IdentifyEvent.o Event.o ConnectResultEvent.o ShutdownTunnelEvent.o TunnelDestroyedEvent.o ShutdownConnectionEvent.o ReadEvent.o ConnectionErrorEvent.o TunnelUnviableEvent.o MsgArrivedEvent.o TimedEvent.o ConnectEvent.o RawDataArrivedEvent.o PollTimeoutEvent.o CheckAckEvent.o SendMsgEvent.o LeakTunnelErrorEvent.o TunnelStateEvent.o ConnectionStateEvent.o ConnectionManagementEvent.o AuditEvent.o TunnelManagementEvent.o UDPSilentEvent.o FlushConnectionEvent.o LaunchServerTestEvent.o NewTunnelParmsEvent.o AuthSuccessEvent.o NTLM.o SecurityBuff.o ConfigBlob.o GlobalConfigBlob.o ClientConfigBlob.o ServerConfigBlob.o SockTunClientConfigBlob.o SockTunServerConfigBlob.o SockTunClient.o SockTunServer.o TCPSockTunServer.o UDPSockTunServer.o TCPSockTunClient.o UDPSockTunClient.o SockTunCallback.o SockTunHandle.o ClientSockTunHandle.o ServerSockTunHandle.o AddrInfo.o ThreadManager.o Thread.o Callback.o Mutex.o MutexVar.o ConditionVar.o FileServerAuthenticator.o
make[1]: Leaving directory `/home/bardwu/bard/httptunnel/src/libhttptun'
echo 'libdirs   \n'
libdirs   

echo 'aaaaaaa  \n'
aaaaaaa  

g++ -c -Wall -DVERSION=\"1.3.2\" -DSTRNAME=\"HTTPTunnel\" -g -I. -I./libhttptun main.cc
echo 'bbbbbb  \n'
bbbbbb  

echo '222222\n'
222222

g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread   -lsocket -lnsl -lrt
echo '333333\n'
333333
 

    其实这个编译的过程很简单,就是把src目录下的libhttpun下的c文件编译打包,最后和src 下的main.o编译连接成

 

   httptunnel这个可执行文件,从这句可以看出。

 

  g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread -lsocket -lnsl -lrt

 

   开始,我没找到libhttpun目录下也有makefile,以为是makefile智能规则推演出来,进行打包了,原来不是。

 

  不过我不明白的是,为什么不用shell命令组合一下把libhttpun下所有的.o文件,打个包不就行了吗,这样以后每次添加

 

  源程序,就不需要手工添加条目了,不然这样也太烦人了,呵呵,有机会试试。

 

  如果您不太懂makefile ,请参阅:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html#content

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值