Более чем 100 отдельных исходных файлов связаны в единственный большой файл C-кода "sqlite3.c", называемый "объединением". Объединение содержит все, что приложение должно включить для SQLite.
Объединение всего кода для SQLite в один большой файл делает SQLite легче в развертывании: есть всего один файл, чтобы отслеживать. И потому что весь код находится в единственной единице перевода, компиляторы могут сделать лучшую обработку и оптимизацию, приводящую к машинному коду, который на 5%-10% быстрее.
Библиотека SQLite состоит из 111 файлов кода C (Version 3.37.0 - 2021-11-27) в ядре с 22 дополнительными файлами, которые осуществляют определенные обычно используемые расширения. Из 133 главных исходных файлов приблизительно 75% это код на C и приблизительно 25% это заголовочные файлы C. Большинство из них это "исходные" файлы в том смысле, что они сохранены в SQLite version control system и редактируются вручную в обычном текстовом редакторе. Но некоторые файлы языка C произведены, используя сценарии или вспомогательные программы. Например, файл parse.y который содержит LALR(1), грамматику языка SQL, собран Lemon parser generator, чтобы произвести анализатор, содержащийся в файле "parse.c", сопровождаемый символическими идентификаторами в "parse.h".
У make-файлов для SQLite есть цель "sqlite3.c" для сборки объединения, чтобы содержать весь код C для основной библиотеки SQLite и расширения FTS3, FTS5, RTREE, DBSTAT, JSON1, RBU и SESSION. Этот файл содержит 238K строк кода (или 145K, если вы опускаете пустые строки и комментарии) и более 8.4 мегабайтов в размере.
Хотя различные расширения включены в "sqlite3.c", они выключены, используя #ifdef. Активируйте расширения, используя варианты времени компиляции:
Объединение содержит все, что необходимо интегрировать SQLite в больший проект. Просто скопируйте объединение в свой исходный каталог и соберите его наряду с другими файлами C в вашем проекте. Более детальное обсуждение процесса компиляции доступно. Можно также хотеть использовать заголовочный файл "sqlite3.h", который определяет API для SQLite. Заголовочный файл sqlite3.h доступен отдельно. Он также содержится в рамках объединения в первых нескольких тысячах строк. Таким образом, если вы имеете копию sqlite3.c, но, может казаться, не определяете местонахождение sqlite3.h, можно всегда восстанавливать sqlite3.h, копируя из объединения.
В дополнение к созданию SQLite, который легче присоединить в другие проекты, объединение также заставляет его работать быстрее. Много компиляторов в состоянии сделать дополнительную оптимизацию на коде , когда он содержится в единственной единице трансляции. Мы измерили повышения производительности между 5 и 10%, когда мы используем объединение, чтобы собрать SQLite, а не отдельные исходные файлы. Оборотная сторона этого то, что дополнительная оптимизация часто принимает форму инлайн-функции, что имеет тенденцию делать размер получающегося образа больше.
Разработчики иногда испытывают проблему, отлаживая четверть миллиона строк исходного файла объединения потому, что некоторые отладчики в состоянии обращаться с числом строк исходного кода только меньше, чем 32,768. Исходный код объединения хорошо работает. Можно просто перескакивать через него в отладчике.
Чтобы обойти это ограничение, объединение также доступно в форме разделения, состоящего из файлов "sqlite3-1.c", "sqlite3-2.c" и т.д., где каждый файл меньше 32,768 строк и где связь файлов содержит весь код для полного объединения. Тогда есть отдельный исходный файл, названный "sqlite3-all.c", который в основном состоит из такого кода:
#include "sqlite3-1.c" #include "sqlite3-2.c" #include "sqlite3-3.c" #include "sqlite3-4.c" #include "sqlite3-5.c" #include "sqlite3-6.c" #include "sqlite3-7.c"
Приложения, используя объединение разделения просто собирают "sqlite3-all.c" вместо "sqlite3.c". Эти два файла работают точно так же. Но с "sqlite3-all.c" никакой единственный исходный файл не содержит больше 32,767 строк кода, таким образом, более удобно использовать некоторые отладчики. Оборотная сторона объединения разделения то, что оно состоит из 6 файлов исходного кода C вместо всего 1.
Объединение и заголовочный файл sqlite3.h доступны на странице загрузки как файл sqlite-amalgamation-X.zip, где X заменяется соответствующим номером версии.
Чтобы построить объединение (полное объединение или объединение разделения), сначала получите канонический исходный код от одного из этих трех серверов. Затем на подобных Unix системах и на системах Windows, у которых есть бесплатная установленная среда разработки MinGW, объединение может быть построено, используя следующие команды:
sh configure make sqlite3.c
Чтобы построить через Microsoft Visual C++, выполните:
nmake /f makefile.msc sqlite3.c
В обоих случаях объединение разделения может быть получено, вписав "sqlite3-all.c" вместо "sqlite3.c" как цель сборки.
Процесс сборки делает широкое применение языка сценариев Tcl scripting language. У вас должна быть копия TCL, установленного для целей сборки выше. Простые в использовании инсталляторы могут быть получены из http://www.tcl-lang.org/. Многие дистрибутивы unix включают Tcl по умолчанию.
Дополнительные примечания по компилированию SQLite могут быть найдены на странице как собрать SQLite.