2.把下載的tinyxml庫解壓縮,我這裡是解壓縮到/opt 目錄下
3.進入到解壓縮目錄下,我們會發現Tinyxml在Windows 下是使用微軟的VS 來生成的庫,因為其中有tinyxml.sln,tinyxml_lib.vcxproj,tinyxmlSTL.vcxproj等檔案,當然,Tinyxml是開源的,所以它也有一個Makefile,用來生成Linux下的Tinyxml庫。整個Tinyxml原始碼專案其實是由2個頭檔案和一個4個C++原始檔(.cpp)組成:tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。其中還有一個xmltest.cpp檔案,只是一個測試程式碼,有興趣的話,大家可以開啟研究它。好了,現在介紹怎麼修改它的Makefile:
(1)使用vim或者其他的編輯器開啟Makefile檔案
(2)將其中的註釋為Targets of the build的下一行OUTPUT := xmltest一行修改為:OUTPUT := libtinyxml.a (3)將其中的註釋為Source files 的下一行SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中的xmltest.cpp刪除,因為它只是一個測試原始檔,不需要編譯。
(4)將其中的Output的下一行的${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改為:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。大致改成這樣
(6)在終端下進入Makefile所在目錄,執行make命令編譯,即可在Makefile所在目錄下生成libtinyxml.a檔案。
4.接下來就可以使用這個靜態庫了:$ g++ -o xmltest xmltest.cpp libtinyxml.a 注意:將使用的靜態庫放在原始檔後面即可,如果靜態庫檔案不在當前目錄,應該使用它的絕對路徑或者用g++的引數-L來指定路徑,因為編譯器預設在當前目錄下先查詢指定的庫檔案。
修改後的Makefile (v 1.0.1) 記錄如下:
[plain] view plain copy print?
#****************************************************************************
#
# Makefile for TinyXml test.
# Lee Thomason
www.grinninglizard.com
# This is a GNU make (gmake) makefile
# DEBUG can be set to YES to include debugging info, or NO otherwise
DEBUG := NO
# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE := NO
# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.
TINYXML_USE_STL := NO
CC := gcc
CXX := g++
LD := g++
AR := ar rc
RANLIB := ranlib
DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG
RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -O3
LIBS :=
DEBUG_CXXFLAGS := ${DEBUG_CFLAGS}
RELEASE_CXXFLAGS := ${RELEASE_CFLAGS}
DEBUG_LDFLAGS := -g
RELEASE_LDFLAGS :=
ifeq (YES, ${DEBUG})
CFLAGS := ${DEBUG_CFLAGS}
CXXFLAGS := ${DEBUG_CXXFLAGS}
LDFLAGS := ${DEBUG_LDFLAGS}
else
CFLAGS := ${RELEASE_CFLAGS}
CXXFLAGS := ${RELEASE_CXXFLAGS}
LDFLAGS := ${RELEASE_LDFLAGS}
endif
ifeq (YES, ${PROFILE})
CFLAGS := ${CFLAGS} -pg -O3
CXXFLAGS := ${CXXFLAGS} -pg -O3
LDFLAGS := ${LDFLAGS} -pg
# Preprocessor directives
ifeq (YES, ${TINYXML_USE_STL})
DEFS := -DTIXML_USE_STL
DEFS :=
# Include paths
#INCS := -I/usr/include/g++-2 -I/usr/local/include
INCS :=
# Makefile code common to all platforms
CFLAGS := ${CFLAGS} ${DEFS}
CXXFLAGS := ${CXXFLAGS} ${DEFS}
# Targets of the build
OUTPUT := libtinyxml.a
all: ${OUTPUT}
# Source files
SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp tinystr.cpp
# Add on the sources for libraries
SRCS := ${SRCS}
OBJS := $(addsuffix .o,$(basename ${SRCS}))
# Output
${OUTPUT}: ${OBJS}
${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}
# ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}
# common rules
# Rules for compiling source files to object files
%.o : %.cpp
${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@
%.o : %.c
${CC} -c ${CFLAGS} ${INCS} $< -o $@
dist:
bash makedistlinux
clean:
-rm -f core ${OBJS} ${OUTPUT}
depend:
#makedepend ${INCS} ${SRCS}
tinyxml.o: tinyxml.h tinystr.h
tinyxmlparser.o: tinyxml.h tinystr.h
tinyxmlerror.o: tinyxml.h tinystr.h
2.把下載的tinyxml庫解壓縮,我這裡是解壓縮到/opt 目錄下
3.進入到解壓縮目錄下,我們會發現Tinyxml在Windows 下是使用微軟的VS 來生成的庫,因為其中有tinyxml.sln,tinyxml_lib.vcxproj,tinyxmlSTL.vcxproj等檔案,當然,Tinyxml是開源的,所以它也有一個Makefile,用來生成Linux下的Tinyxml庫。整個Tinyxml原始碼專案其實是由2個頭檔案和一個4個C++原始檔(.cpp)組成:tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。其中還有一個xmltest.cpp檔案,只是一個測試程式碼,有興趣的話,大家可以開啟研究它。好了,現在介紹怎麼修改它的Makefile:
(1)使用vim或者其他的編輯器開啟Makefile檔案
(2)將其中的註釋為Targets of the build的下一行OUTPUT := xmltest一行修改為:OUTPUT := libtinyxml.a (3)將其中的註釋為Source files 的下一行SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中的xmltest.cpp刪除,因為它只是一個測試原始檔,不需要編譯。
(4)將其中的Output的下一行的${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改為:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。大致改成這樣
${OUTPUT}: ${OBJS} ${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} # ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} (5)將Makefile的倒數第二行 xmltest.o:tinyxml.h tinystr.h,註釋掉,因為不需要將演示程式新增到靜態庫中。然後儲存退出。(6)在終端下進入Makefile所在目錄,執行make命令編譯,即可在Makefile所在目錄下生成libtinyxml.a檔案。
4.接下來就可以使用這個靜態庫了:$ g++ -o xmltest xmltest.cpp libtinyxml.a 注意:將使用的靜態庫放在原始檔後面即可,如果靜態庫檔案不在當前目錄,應該使用它的絕對路徑或者用g++的引數-L來指定路徑,因為編譯器預設在當前目錄下先查詢指定的庫檔案。
修改後的Makefile (v 1.0.1) 記錄如下:
[plain] view plain copy print?
#****************************************************************************
#
# Makefile for TinyXml test.
# Lee Thomason
#
www.grinninglizard.com
#
# This is a GNU make (gmake) makefile
#****************************************************************************
# DEBUG can be set to YES to include debugging info, or NO otherwise
DEBUG := NO
# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE := NO
# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.
TINYXML_USE_STL := NO
#****************************************************************************
CC := gcc
CXX := g++
LD := g++
AR := ar rc
RANLIB := ranlib
DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG
RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -O3
LIBS :=
DEBUG_CXXFLAGS := ${DEBUG_CFLAGS}
RELEASE_CXXFLAGS := ${RELEASE_CFLAGS}
DEBUG_LDFLAGS := -g
RELEASE_LDFLAGS :=
ifeq (YES, ${DEBUG})
CFLAGS := ${DEBUG_CFLAGS}
CXXFLAGS := ${DEBUG_CXXFLAGS}
LDFLAGS := ${DEBUG_LDFLAGS}
else
CFLAGS := ${RELEASE_CFLAGS}
CXXFLAGS := ${RELEASE_CXXFLAGS}
LDFLAGS := ${RELEASE_LDFLAGS}
endif
ifeq (YES, ${PROFILE})
CFLAGS := ${CFLAGS} -pg -O3
CXXFLAGS := ${CXXFLAGS} -pg -O3
LDFLAGS := ${LDFLAGS} -pg
endif
#****************************************************************************
# Preprocessor directives
#****************************************************************************
ifeq (YES, ${TINYXML_USE_STL})
DEFS := -DTIXML_USE_STL
else
DEFS :=
endif
#****************************************************************************
# Include paths
#****************************************************************************
#INCS := -I/usr/include/g++-2 -I/usr/local/include
INCS :=
#****************************************************************************
# Makefile code common to all platforms
#****************************************************************************
CFLAGS := ${CFLAGS} ${DEFS}
CXXFLAGS := ${CXXFLAGS} ${DEFS}
#****************************************************************************
# Targets of the build
#****************************************************************************
OUTPUT := libtinyxml.a
all: ${OUTPUT}
#****************************************************************************
# Source files
#****************************************************************************
SRCS := tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp tinystr.cpp
# Add on the sources for libraries
SRCS := ${SRCS}
OBJS := $(addsuffix .o,$(basename ${SRCS}))
#****************************************************************************
# Output
#****************************************************************************
${OUTPUT}: ${OBJS}
${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}
# ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}
#****************************************************************************
# common rules
#****************************************************************************
# Rules for compiling source files to object files
%.o : %.cpp
${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@
%.o : %.c
${CC} -c ${CFLAGS} ${INCS} $< -o $@
dist:
bash makedistlinux
clean:
-rm -f core ${OBJS} ${OUTPUT}
depend:
#makedepend ${INCS} ${SRCS}
tinyxml.o: tinyxml.h tinystr.h
tinyxmlparser.o: tinyxml.h tinystr.h
tinyxmlerror.o: tinyxml.h tinystr.h