警告
外籍人士人手不足,也没有资金。 Changes
文件顶部有一个有关详细信息的求助电话。
这是 Expat,一个用于解析 XML 1.0 第四版的 C99 库,由 James Clark 于 1997 年启动。Expat 是一个面向流的 XML 解析器。这意味着您在开始解析之前向解析器注册处理程序。当解析器发现正在解析的文档中的关联结构时,将调用这些处理程序。开始标记是您可以为其注册处理程序的结构类型的一个示例。
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