警告
外籍人士人手不足,也沒有資金。 Changes
文件頂部有一個有關詳細資訊的求助電話。
這是 Expat,一個用於解析 XML 1.0 第四版的 C99 函式庫,由 James Clark 於 1997 年啟動。這意味著您在開始解析之前向解析器註冊處理程序。當解析器發現正在解析的文件中的關聯結構時,將會呼叫這些處理程序。開始標記是您可以為其註冊處理程序的結構類型的範例。
Expat 支援以下編譯器:
${today} minus 5 years
) Windows 使用者可以使用expat-win32bin-*.*.*.{exe,zip}
下載,其中包括預先編譯的函式庫和可執行文件,以及供開發人員使用的原始程式碼。
Expat 是免費軟體。您可以根據隨本軟體包分發的檔案COPYING
中包含的授權條款來複製、散佈和修改它。此授權與 MIT/X Consortium 授權相同。
有記錄的三種將 libexpat 與 CMake 結合使用的方法:
find_package
這種方法利用了 CMake 自己的模組FindEXPAT
。
請注意以下範例中的大寫EXPAT
:
cmake_minimum_required ( VERSION 3.0) # or 3.10, see below
project (hello VERSION 1.0.0)
find_package (EXPAT 2.2.8 MODULE REQUIRED)
add_executable (hello
hello.c
)
# a) for CMake >=3.10 (see CMake's FindEXPAT docs)
target_link_libraries (hello PUBLIC EXPAT::EXPAT)
# b) for CMake >=3.0
target_include_directories (hello PRIVATE ${EXPAT_INCLUDE_DIRS} )
target_link_libraries (hello PUBLIC ${EXPAT_LIBRARIES} )
find_package
此方法需要來自...的文件
請注意以下範例中的小寫expat
:
cmake_minimum_required ( VERSION 3.0)
project (hello VERSION 1.0.0)
find_package (expat 2.2.8 CONFIG REQUIRED char dtd ns)
add_executable (hello
hello.c
)
target_link_libraries (hello PUBLIC expat::expat)
FetchContent
模組這種方法(如下所示)需要 CMake >=3.18 才能使FetchContent
模組及其對SOURCE_SUBDIR
選項的支援可用。
請注意:
FetchContent
模組與非發布SHA1 或 libexpat master
一起使用。對於透過 Git 拉入 libexpat 的範例:
cmake_minimum_required ( VERSION 3.18)
include (FetchContent)
project (hello VERSION 1.0.0)
FetchContent_Declare(
expat
GIT_REPOSITORY https://github.com/libexpat/libexpat/
GIT_TAG 000000000_GIT_COMMIT_SHA1_HERE_000000000 # i.e. Git tag R_0_Y_Z
SOURCE_SUBDIR expat/
)
FetchContent_MakeAvailable(expat)
add_executable (hello
hello.c
)
target_link_libraries (hello PUBLIC expat)
如果您從 Git 儲存庫簽出來建置 Expat,則需要執行一個使用 GNU autoconf 和 libtool 工具產生配置腳本的腳本。為此,您需要具有 autoconf 2.58 或更高版本。像這樣運行腳本:
./buildconf.sh
完成此操作後,請遵循與從來源發行版建置相同的說明。
若要從來源發行版建置 Expat,首先要在頂級發行版目錄中執行配置 shell 腳本:
./configure
您可以提供許多選項來配置(您可以透過使用--help
選項來執行 configure 來發現這些選項)。但最令人感興趣的是設定安裝目錄的部分。預設情況下,configure 腳本將進行設定以將 libexpat 安裝到/usr/local/lib
,將expat.h
安裝到/usr/local/include
,將xmlwf
安裝到/usr/local/bin
。例如,如果您希望安裝到/home/me/mystuff/lib
、 /home/me/mystuff/include
和/home/me/mystuff/bin
,您可以使用以下命令告訴configure
:
./configure --prefix=/home/me/mystuff
另一個有趣的選項是啟用對行號、列號以及整體位元組索引的 64 位元整數支援:
./configure CPPFLAGS=-DXML_LARGE_SIZE
然而,這樣的修改將是 ABI 的重大更改,因此不建議一般使用(例如作為 Linux 發行版的一部分),而是建議用於具有特殊要求的建置。
執行configure腳本後, make
指令將會建置東西,並且make install
將東西安裝到正確的位置。查看Makefile
以了解其他make
選項。請注意,您需要對要安裝的目錄具有寫入權限。
如果您有興趣建立 Expat 以提供 UTF-16 編碼而不是預設 UTF-8 編碼的文檔訊息,請按照以下說明進行操作(在運行make distclean
後)。請注意,我們使用--without-xmlwf
進行配置,因為 xmlwf 還不支援這種編譯模式:
批次修補Makefile.am
檔案以使用libexpatw.la
作為函式庫名稱:
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
執行automake
來重寫Makefile.in
檔:
automake
對於 UTF-16 輸出為 unsigned Short(版本/錯誤字串為 char),請執行:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
對於 UTF-16 輸出為wchar_t
(包括版本/錯誤字串),請執行:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
注意:後者還需要使用-fshort-wchar
編譯的 libc 。
運行make
(不包括 xmlwf)。
執行make install
(同樣,不包括 xmlwf)。
支援使用DESTDIR
。其工作原理如下:
make install DESTDIR=/path/to/image
覆寫 makefile 中設定的DESTDIR
,因為變數設定優先權是
注意:這僅適用於 Expat 庫本身,建立 xmlwf 的 UTF-16 版本,且目前不支援測試。
當在使用 autoconf 進行設定的專案中使用 Expat 時,您可以使用conftools/expat.m4
中的探測巨集來決定如何包含 Expat。有關詳細信息,請參閱該文件頂部的註釋。
本發行版的doc/reference.html
文件中提供了參考手冊。
CMake 建置系統仍處於實驗階段,在準備就緒時可能會取代基於 GNU Autotools 的主要建置系統。
有關使用 CMake 進行構建的可用(非高級)選項的想法:
# rm -f CMakeCache.txt ; cmake -D_EXPAT_HELP=ON -LH . | grep -B1 ' :.*= ' | sed ' s,^--$,, '
// Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...
CMAKE_BUILD_TYPE:STRING=
// Install path prefix, prepended onto install directories.
CMAKE_INSTALL_PREFIX:PATH=/usr/local
// Path to a program.
DOCBOOK_TO_MAN:FILEPATH=/usr/bin/docbook2x-man
// Build man page for xmlwf
EXPAT_BUILD_DOCS:BOOL=ON
// Build the examples for expat library
EXPAT_BUILD_EXAMPLES:BOOL=ON
// Build fuzzers for the expat library
EXPAT_BUILD_FUZZERS:BOOL=OFF
// Build pkg-config file
EXPAT_BUILD_PKGCONFIG:BOOL=ON
// Build the tests for expat library
EXPAT_BUILD_TESTS:BOOL=ON
// Build the xmlwf tool for expat library
EXPAT_BUILD_TOOLS:BOOL=ON
// Character type to use (char|ushort|wchar_t) [default=char]
EXPAT_CHAR_TYPE:STRING=char
// Install expat files in cmake install target
EXPAT_ENABLE_INSTALL:BOOL=ON
// Use /MT flag (static CRT) when compiling in MSVC
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
// Build fuzzers via ossfuzz for the expat library
EXPAT_OSSFUZZ_BUILD:BOOL=OFF
// Build a shared expat library
EXPAT_SHARED_LIBS:BOOL=ON
// Treat all compiler warnings as errors
EXPAT_WARNINGS_AS_ERRORS:BOOL=OFF
// Make use of getrandom function (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_GETRANDOM:STRING=AUTO
// Utilize libbsd (for arc4random_buf)
EXPAT_WITH_LIBBSD:BOOL=OFF
// Make use of syscall SYS_getrandom (ON|OFF|AUTO) [default=AUTO]
EXPAT_WITH_SYS_GETRANDOM:STRING=AUTO