cite frome: http://blog.csdn.net/yasi_xi/article/details/38872467
因為不習(xí)慣用Windows 下的VS 2010,加上大多數(shù)時候是在Linux下編程,所以想把Tinyxml配置到Linux下為我所用。
相信大家都知道Tinyxml是一個非常小巧實用的XML解析器,這里不說的它的使用方法纹份,具體配置步驟如下:
1.首先赵辕,要到官網(wǎng)上去把tinyxml庫下載下來馆纳,網(wǎng)址為:點擊打開鏈接:http://sourceforge.net/projects/tinyxml/
2.把下載的tinyxml庫解壓縮军掂,我這里是解壓縮到/opt 目錄下
3.進(jìn)入到解壓縮目錄下,我們會發(fā)現(xiàn)Tinyxml在Windows 下是使用微軟的VS
來生成的庫举瑰,因為其中有tinyxml.sln劳曹,tinyxml_lib.vcxproj奴愉,tinyxmlSTL.vcxproj等文件,當(dāng)
然铁孵,Tinyxml是開源的锭硼,所以它也有一個Makefile,用來生成Linux下的Tinyxml庫。整個Tinyxml源碼項目其實是由2個頭文件
和一個4個C++源文件(.cpp)組
成:tinystr.h蜕劝,tinyxml.h檀头,tinystr.cpp,tinyxml.cpp岖沛,tinyxmlerror.cpp暑始,tinyxmlparser.cpp。
其中還有一個xmltest.cpp文件婴削,只是一個測試代碼廊镜,有興趣的話,大家可以打開研究它唉俗。好了嗤朴,現(xiàn)在介紹怎么修改它的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}。大致改成這樣
[plain]view plaincopy
${OUTPUT}:?${OBJS}
${AR}?$@?${LDFLAGS}?${OBJS}?${LIBS}?${EXTRA_LIBS}
#???????${LD}?-o?$@?${LDFLAGS}?${OBJS}?${LIBS}?${EXTRA_LIBS}
(5)將Makefile的倒數(shù)第二行 xmltest.o:tinyxml.h tinystr.h衡楞,注釋掉容为,因為不需要將演示程序添加到靜態(tài)庫中。然后保存退出。
(6)在終端下進(jìn)入Makefile所在目錄坎背,執(zhí)行make命令編譯,即可在Makefile所在目錄下生成libtinyxml.a文件寄雀。
4.接下來就可以使用這個靜態(tài)庫了:$ g++ -o xmltest
xmltest.cpp libtinyxml.a
注意:將使用的靜態(tài)庫放在源文件后面即可得滤,如果靜態(tài)庫文件不在當(dāng)前目錄,應(yīng)該使用它的絕對路徑或者用g++的參數(shù)-L來指定路徑盒犹,因為編譯器默認(rèn)在當(dāng)前目
錄下先查找指定的庫文件懂更。
修改后的Makefile (v 1.0.1) 記錄如下:
[plain]view plaincopy
#****************************************************************************
#
#?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