Vorsicht
Expat ist unterbesetzt und ohne Finanzierung. Oben in der Changes
finden Sie einen Hilferuf mit Einzelheiten.
Dies ist Expat, eine C99-Bibliothek zum Parsen von XML 1.0 Fourth Edition, die 1997 von James Clark gestartet wurde. Expat ist ein streamorientierter XML-Parser. Das bedeutet, dass Sie Handler beim Parser registrieren, bevor Sie mit dem Parsen beginnen. Diese Handler werden aufgerufen, wenn der Parser die zugehörigen Strukturen im analysierten Dokument erkennt. Ein Start-Tag ist ein Beispiel für die Art von Strukturen, für die Sie Handler registrieren können.
Expat unterstützt die folgenden Compiler:
${today} minus 5 years
) Windows-Benutzer können den Download expat-win32bin-*.*.*.{exe,zip}
verwenden, der sowohl vorkompilierte Bibliotheken und ausführbare Dateien als auch Quellcode für Entwickler enthält.
Expat ist freie Software. Sie dürfen es gemäß den Bedingungen der Lizenz, die in der mit diesem Paket verteilten Datei COPYING
enthalten ist, kopieren, verteilen und ändern. Diese Lizenz ist mit der MIT/X Consortium-Lizenz identisch.
Es gibt drei dokumentierte Möglichkeiten, libexpat mit CMake zu verwenden:
find_package
mit Modulmodus Dieser Ansatz nutzt das CMake-eigene Modul FindEXPAT
.
Beachten Sie den Großbuchstaben EXPAT
im folgenden Beispiel:
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
mit Config ModeDieser Ansatz erfordert Dateien von…
Beachten Sie den Kleinbuchstaben expat
im folgenden Beispiel:
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
-Modul Dieser Ansatz erfordert – wie unten gezeigt – CMake >=3.18, damit sowohl das FetchContent
-Modul als auch seine Unterstützung für die Option SOURCE_SUBDIR
verfügbar sind.
Bitte beachten Sie Folgendes:
FetchContent
-Moduls mit Nicht-Release -SHA1s oder master
von libexpat wird weder empfohlen noch gilt es als offiziell unterstützt.Ein Beispiel, das libexpat über Git abruft:
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)
Wenn Sie Expat durch Auschecken aus dem Git-Repository erstellen, müssen Sie ein Skript ausführen, das das Konfigurationsskript mithilfe der GNU-Tools autoconf und libtool generiert. Dazu benötigen Sie Autoconf 2.58 oder neuer. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Befolgen Sie anschließend die gleichen Anweisungen wie beim Erstellen aus einer Quelldistribution.
Um Expat aus einer Quelldistribution zu erstellen, führen Sie zunächst das Konfigurations-Shell-Skript im Distributionsverzeichnis der obersten Ebene aus:
./configure
Es gibt viele Optionen, die Sie zum Konfigurieren bereitstellen können (die Sie ermitteln können, indem Sie configure mit der Option --help
ausführen). Am interessantesten ist jedoch diejenige, die das Installationsverzeichnis festlegt. Standardmäßig richtet das Konfigurationsskript die Installation von libexpat in /usr/local/lib
, expat.h
in /usr/local/include
und xmlwf
in /usr/local/bin
ein. Wenn Sie beispielsweise lieber in /home/me/mystuff/lib
, /home/me/mystuff/include
und /home/me/mystuff/bin
installieren möchten, können Sie configure
dies mitteilen:
./configure --prefix=/home/me/mystuff
Eine weitere interessante Option besteht darin, die 64-Bit-Integer-Unterstützung für Zeilen- und Spaltennummern und den Gesamtbyte-Index zu aktivieren:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Allerdings wäre eine solche Modifikation eine bahnbrechende Änderung des ABI und wird daher nicht für den allgemeinen Einsatz – etwa als Teil einer Linux-Distribution – sondern eher für Builds mit besonderen Anforderungen empfohlen.
Nach der Ausführung des Konfigurationsskripts erstellt der Befehl make
die Dinge und make install
installiert die Dinge an ihrem richtigen Speicherort. Schauen Sie sich das Makefile
an, um mehr über zusätzliche make
Optionen zu erfahren. Beachten Sie, dass Sie Schreibrechte für die Verzeichnisse benötigen, in denen die Dinge installiert werden.
Wenn Sie daran interessiert sind, Expat so zu erstellen, dass Dokumentinformationen in UTF-16-Codierung statt im Standard-UTF-8 bereitgestellt werden, befolgen Sie diese Anweisungen (nachdem Sie make distclean
ausgeführt haben). Bitte beachten Sie, dass wir mit --without-xmlwf
konfigurieren, da xmlwf diesen Kompilierungsmodus (noch) nicht unterstützt:
Massenpatchen Sie Makefile.am
Dateien, um libexpatw.la
für einen Bibliotheksnamen zu verwenden:
find . -name Makefile.am -exec sed -e 's,libexpat.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i.bak {} +
Führen Sie automake
aus, um Makefile.in
-Dateien neu zu schreiben:
automake
Für die UTF-16-Ausgabe als unsigned short (und Versions-/Fehlerzeichenfolgen als char) führen Sie Folgendes aus:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Für die UTF-16-Ausgabe als wchar_t
(inkl. Versions-/Fehlerzeichenfolgen) führen Sie Folgendes aus:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Hinweis: Letzteres erfordert auch eine mit -fshort-wchar
kompilierte libc.
Führen Sie make
(was xmlwf ausschließt).
Führen Sie make install
(ohne xmlwf).
Die Verwendung von DESTDIR
wird unterstützt. Es funktioniert wie folgt:
make install DESTDIR=/path/to/image
überschreibt den In-Makefile-Satz DESTDIR
, da die Variableneinstellung Priorität hat
Hinweis: Dies gilt nur für die Expat-Bibliothek selbst. Das Erstellen von UTF-16-Versionen von xmlwf und den Tests wird derzeit nicht unterstützt.
Wenn Sie Expat mit einem Projekt verwenden, das Autoconf zur Konfiguration verwendet, können Sie das Sondierungsmakro in conftools/expat.m4
verwenden, um zu bestimmen, wie Expat einbezogen wird. Weitere Informationen finden Sie in den Kommentaren oben in dieser Datei.
Ein Referenzhandbuch ist in der Datei doc/reference.html
in dieser Distribution verfügbar.
Das CMake-Build-System ist noch experimentell und könnte irgendwann, wenn es fertig ist, das primäre Build-System auf Basis von GNU Autotools ersetzen.
Für eine Vorstellung der verfügbaren (nicht erweiterten) Optionen zum Erstellen mit 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