今天学习了一下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