实例分析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/shOS=$(shell uname -s)CC=g++SVRAUTH=FILESSL=NONAME=HTTPTUNNELLIBDIRS=libhttptunAPPOBJS=main.o# Default auth settingsAUTHLIBS=# Default SSL settingsSSLLIBS=SSLKEY=SSLCERT=SSLDEPENDS=# Server authentication settingsifeq ($(SVRAUTH),DB)AUTHLIBS=-lmysqlppendif# SSL settingsifeq ($(SSL),YES)SSLKEY=SSLKey.pemSSLCERT=SSLCert.pemSSLDEPENDS=$(SSLKEY) $(SSLCERT)endif# Application nameTUNLIBNAME=libhttptun/libhttptun.aFDSNAME=FiredrillFDANAME=firedrillHTSNAME=HTTPTunnelHTANAME=httptunnelifeq ($(NAME),FIREDRILL)NAMEFLAGS=-DSTRNAME=\"${FDSNAME}\"APPNAME=$(FDANAME)elseNAMEFLAGS=-DSTRNAME=\"${HTSNAME}\"APPNAME=$(HTANAME)endif# Build objectsTUNAPPOBJS=$(APPOBJS)GLOBALLIBS=-lpthread# Linux specificifeq ($(findstring Linux,$(OS)),Linux)ifeq ($(SSL),YES)SSLLIBS=-lsslendifPLATFORMLIBS=$(SSLLIBS)endif# Solaris specificifeq ($(findstring SunOS,$(OS)),SunOS)ifeq ($(SSL),YES)SSLLIBS=-L/usr/local/ssl/lib -lssl -lcrypto -ldlendifPLATFORMLIBS=$(SSLLIBS) -lsocket -lnsl -lrtendif# Mac OS X specificifeq ($(findstring Darwin,$(OS)),Darwin)ifeq ($(SSL),YES)SSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Cygwin specificifeq ($(findstring CYGWIN,$(OS)),CYGWIN)ifeq ($(SSL),YES)SSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Includes & compile flagsVERSION=1.3.2INCLUDES=-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_TUNDEBUGCFLAGS=-gGLOBALCFLAGS=-Wall -DVERSION=\"$(VERSION)\" $(NAMEFLAGS) $(DEBUGCFLAGS)CCFLAGS=$(GLOBALCFLAGS) $(INCLUDES)LIBS=$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)# DependenciesGLOBALDEPS=MakefileTUNAPPDEPENDS=$(patsubst %.o,%.d,$(TUNAPPOBJS))DEPENDS=$(TUNAPPDEPENDS) $(TSTAPPDEPENDS)############## Build rules##############makefile程序执行的入口# Top level.PHONY:all #表明all并不是真正的文件,是个指令all:depend libdirs $(APPNAME) $(SSLDEPENDS)#all 这个指令依赖 后来4个文件,或者伪指令,$(**)表示的是文件,depend,libdirs可以#从后面判断是伪指令。# Dependenciesinclude $(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) libdirsecho '222222\n'$(CC) -o $(APPNAME) $(TUNAPPOBJS) $(TUNLIBNAME) $(LIBS)echo '333333\n'%.o:%.cc $(GLOBALDEPS)echo 'aaaaaaa \n'$(CC) -c $(CCFLAGS) $*.ccecho 'bbbbbb \n'##################### Other useful rules####################.PHONY:cleanclean:cd libhttptun && $(MAKE) cleanrm -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/shOS=$(shell uname -s)CC=g++AR=arSVRAUTH=FILESSL=NOLIBOBJS=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.oCLIOBJS=testcli.oSVROBJS=testsvr.o# Default auth settingsAUTHOBJS=AUTHLIBS=AUTHINCLUDES=AUTHFLAGS=# Default SSL settingsSSLLIBS=SSLINCLUDES=SSLFLAGS=# Server authentication settingsifeq ($(SVRAUTH),DB)AUTHOBJS=DBServerAuthenticator.o DBUserDetails.oAUTHLIBS=-lmysqlppAUTHINCLUDES=-I/usr/include/mysql -I/usr/include/mysql++AUTHFLAGS=-DAUTH_DBendififeq ($(SVRAUTH),FILE)AUTHOBJS=FileServerAuthenticator.oAUTHFLAGS=-DAUTH_FILEendif# SSL settingsifeq ($(SSL),YES)SSLFLAGS=-DUSE_SSLendif# Application nameTUNLIBNAME=libhttptun.aAPPCLINAME=testcliAPPSVRNAME=testsvr# Build objectsTUNLIBOBJS=$(LIBOBJS) $(AUTHOBJS)APPCLIOBJS=$(CLIOBJS)APPSVROBJS=$(SVROBJS)GLOBALLIBS=-lpthread# Linux specificifeq ($(findstring Linux,$(OS)),Linux)PLATFORMNAME=LINUXifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lsslendifPLATFORMLIBS=$(SSLLIBS)endif# Solaris specificifeq ($(findstring SunOS,$(OS)),SunOS)PLATFORMNAME=SOLARISifeq ($(SSL),YES)SSLINCLUDES=-I/usr/local/ssl/include/openssl -I/usr/local/ssl/includeSSLLIBS=-L/usr/local/ssl/lib -lssl -lcrypto -ldlendifPLATFORMLIBS=$(SSLLIBS) -lsocket -lnsl -lrtendif# Mac OS X specificifeq ($(findstring Darwin,$(OS)),Darwin)PLATFORMNAME=OSXifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Cygwin specificifeq ($(findstring CYGWIN,$(OS)),CYGWIN)PLATFORMNAME=CYGWINifeq ($(SSL),YES)SSLINCLUDES=-I/usr/include/opensslSSLLIBS=-lssl -lcryptoendifPLATFORMLIBS=$(SSLLIBS)endif# Includes & compile flagsVERSION=1.3.2PLATFORM=-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_TUNDEBUGCFLAGS=-gGLOBALCFLAGS=-Wall -DLIBVERSION=\"$(VERSION)\" $(PLATFORM) $(DEBUGCFLAGS) \$(AUTHFLAGS) $(SSLFLAGS)CCFLAGS=$(GLOBALCFLAGS) $(INCLUDES)LIBS=$(GLOBALLIBS) $(AUTHLIBS) $(PLATFORMLIBS)# DependenciesGLOBALDEPS=MakefileTUNLIBDEPENDS=$(patsubst %.o,%.d,$(TUNLIBOBJS))APPCLIDEPENDS=$(patsubst %.o,%.d,$(APPCLIOBJS))APPSVRDEPENDS=$(patsubst %.o,%.d,$(APPSVROBJS))DEPENDS=$(TUNLIBDEPENDS) $(APPCLIDEPENDS) $(APPSVRDEPENDS)############## Build rules############## Top level.PHONY:allall:depend $(TUNLIBNAME)# Dependenciesinclude $(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:dependdepend:$(DEPENDS)# Library$(TUNLIBNAME):$(TUNLIBOBJS)$(AR) -r $(TUNLIBNAME) $(TUNLIBOBJS)# Test applications.PHONY:testtest:$(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:cleanclean:rm -f $(TUNLIBNAME) $(APPCLINAME) $(APPSVRNAME) *.o *.d??
?? ?最后的执行结果是这样的:
?
???-- makedepend main.d
echo 'depend \n'depend echo 'LIBDIRS \n'LIBDIRS make -C libhttptunmake[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.dmake[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.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Logger.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Server.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Sock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SSLSock.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Tunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestClientTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TestServerTunnel.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Tunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSClientTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunneler.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientTunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerTunnelParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TuneSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Reader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPReader.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Writer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawWriter.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPWriter.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Connection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DummyRawConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SOCKSConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPConnection.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPRequestMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPResponseMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPGetMsg.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. HTTPMsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ErrorMsgParms.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AutoPtr.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelStats.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Payload.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawBuff.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Utils.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Time.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. URLCode.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SeqNo.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Firewall.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MD5.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MD4.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DES.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. OptionsParser.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. GlobalConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientSideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerSideConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ProxySettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelConfig.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelID.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelerID.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Authenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. DefaultServerAuthenticator.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthDigest.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerAuthSettings.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. User.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Quotas.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionManager.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectProxy.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. EventReceiver.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. IdentifyEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Event.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectResultEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ShutdownTunnelEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelDestroyedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ShutdownConnectionEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ReadEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionErrorEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelUnviableEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MsgArrivedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TimedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. RawDataArrivedEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. PollTimeoutEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. CheckAckEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SendMsgEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. LeakTunnelErrorEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelStateEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionStateEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConnectionManagementEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuditEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TunnelManagementEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSilentEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. FlushConnectionEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. LaunchServerTestEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. NewTunnelParmsEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AuthSuccessEvent.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. NTLM.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SecurityBuff.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. GlobalConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunClientConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunServerConfigBlob.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSockTunServer.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. TCPSockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. UDPSockTunClient.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunCallback.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. SockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ClientSockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ServerSockTunHandle.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. AddrInfo.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ThreadManager.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Thread.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Callback.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. Mutex.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. MutexVar.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. ConditionVar.ccg++ -c -Wall -DLIBVERSION=\"1.3.2\" -DPLATFORM_SOLARIS -DPLATNAME=\"SOLARIS\" -g -DAUTH_FILE -I. FileServerAuthenticator.ccar -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.omake[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.ccecho 'bbbbbb \n'bbbbbb echo '222222\n'222222g++ -o httptunnel main.o libhttptun/libhttptun.a -lpthread -lsocket -lnsl -lrtecho '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
?
?
?