คำเตือน
ชาวต่างชาติ มีไม่เพียงพอ และไม่มีเงินทุน มีการขอความช่วยเหลือพร้อมรายละเอียดที่ด้านบนของไฟล์ Changes
นี่คือ Expat ซึ่งเป็นไลบรารี C99 สำหรับแยกวิเคราะห์ XML 1.0 Fourth Edition เริ่มต้นโดย James Clark ในปี 1997 Expat เป็นตัวแยกวิเคราะห์ XML ที่มุ่งเน้นสตรีม ซึ่งหมายความว่าคุณลงทะเบียนตัวจัดการกับ parser ก่อนที่จะเริ่มการแยกวิเคราะห์ ตัวจัดการเหล่านี้จะถูกเรียกเมื่อ parser ค้นพบโครงสร้างที่เกี่ยวข้องในเอกสารที่กำลังแยกวิเคราะห์ แท็กเริ่มต้นเป็นตัวอย่างของชนิดของโครงสร้างที่คุณสามารถลงทะเบียนตัวจัดการได้
Expat รองรับคอมไพเลอร์ต่อไปนี้:
${today} minus 5 years
) ผู้ใช้ Windows สามารถใช้การดาวน์โหลด expat-win32bin-*.*.*.{exe,zip}
ซึ่งรวมถึงไลบรารีและไฟล์ปฏิบัติการที่คอมไพล์ไว้ล่วงหน้า และซอร์สโค้ดสำหรับนักพัฒนา
Expat เป็นซอฟต์แวร์ฟรี คุณสามารถคัดลอก แจกจ่าย และแก้ไขได้ภายใต้เงื่อนไขของใบอนุญาตที่มีอยู่ในไฟล์ COPYING
ที่แจกจ่ายพร้อมกับแพ็คเกจนี้ ใบอนุญาตนี้เหมือนกับใบอนุญาต MIT/X Consortium
มีสามวิธีในการใช้ libexpat กับ CMake:
find_package
พร้อมโหมดโมดูล แนวทางนี้ใช้ประโยชน์จากโมดูล FindEXPAT
ของ CMake เอง
โปรดสังเกต 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 ที่ไม่เผยแพร่ หรือ master
ของ libexpat ไม่แนะนำหรือถือว่าได้รับการสนับสนุนอย่างเป็นทางการสำหรับตัวอย่างที่ดึง libexpat ผ่าน Git:
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)
หากคุณกำลังสร้าง Expat จากการเช็คเอาต์จากพื้นที่เก็บข้อมูล Git คุณจะต้องเรียกใช้สคริปต์ที่สร้างสคริปต์กำหนดค่าโดยใช้เครื่องมือ autoconf และ libtool ของ GNU หากต้องการทำเช่นนี้ คุณต้องมี autoconf 2.58 หรือใหม่กว่า รันสคริปต์ดังนี้:
./buildconf.sh
เมื่อดำเนินการเสร็จแล้ว ให้ปฏิบัติตามคำแนะนำเดียวกันกับการสร้างจากการกระจายแหล่งที่มา
ในการสร้าง Expat จากการกระจายต้นทาง คุณต้องรันเชลล์สคริปต์การกำหนดค่าในไดเร็กทอรีการแจกจ่ายระดับบนสุด:
./configure
มีตัวเลือกมากมายที่คุณอาจจัดเตรียมไว้เพื่อกำหนดค่า (ซึ่งคุณสามารถค้นหาได้ด้วยการเรียกใช้การกำหนดค่าด้วยตัวเลือก --help
) แต่สิ่งที่น่าสนใจที่สุดคือตัวที่ตั้งค่าไดเร็กทอรีการติดตั้ง ตามค่าเริ่มต้น สคริปต์กำหนดค่าจะตั้งค่าต่างๆ เพื่อติดตั้ง 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 แต่สำหรับรุ่นที่มีข้อกำหนดพิเศษ
หลังจากรันสคริปต์กำหนดค่าแล้ว คำสั่ง make
จะสร้างสิ่งต่าง ๆ และ make install
จะติดตั้งสิ่งต่าง ๆ ในตำแหน่งที่เหมาะสม ดู Makefile
เพื่อเรียนรู้เกี่ยวกับตัวเลือก make
เพิ่มเติม โปรดทราบว่าคุณต้องมีสิทธิ์ในการเขียนลงในไดเร็กทอรีที่จะติดตั้งสิ่งต่างๆ
หากคุณสนใจที่จะสร้าง Expat เพื่อให้ข้อมูลเอกสารในการเข้ารหัส UTF-16 แทนที่จะเป็น UTF-8 เริ่มต้น ให้ทำตามคำแนะนำเหล่านี้ (หลังจากรันแล้ว make distclean
) โปรดทราบว่าเรากำหนดค่าด้วย --without-xmlwf
เนื่องจาก xmlwf ไม่รองรับโหมดการคอมไพล์นี้ (ยัง):
ไฟล์ Mass-patch 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 เป็นแบบสั้นที่ไม่ได้ลงนาม (และสตริงเวอร์ชัน/ข้อผิดพลาดเป็นถ่าน) ให้รัน:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
สำหรับเอาต์พุต UTF-16 เป็น wchar_t
(รวมเวอร์ชัน/สตริงข้อผิดพลาด) ให้รัน:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
หมายเหตุ: ส่วนหลังต้องการ libc ที่คอมไพล์ด้วย -fshort-wchar
เช่นกัน
เรียกใช้ make
(ซึ่งไม่รวม xmlwf)
เรียกใช้ make install
(อีกครั้งไม่รวม xmlwf)
รองรับการใช้ DESTDIR
มันทำงานดังนี้:
make install DESTDIR=/path/to/image
แทนที่ชุด in-makefile DESTDIR
เนื่องจากลำดับความสำคัญของการตั้งค่าตัวแปรคือ
หมายเหตุ: สิ่งนี้ใช้ได้กับไลบรารี Expat เท่านั้น การสร้าง xmlwf เวอร์ชัน UTF-16 และการทดสอบยังไม่รองรับในขณะนี้
เมื่อใช้ Expat กับโปรเจ็กต์ที่ใช้ autoconf สำหรับการกำหนดค่า คุณสามารถใช้มาโครการตรวจสอบใน 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