Различия между версиями 9 и 10
Версия 9 от 2020-10-15 01:58:22
Размер: 5264
Редактор: FrBrGeorge
Комментарий:
Версия 10 от 2020-10-15 02:19:17
Размер: 5549
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 64: Строка 64:
    * '''Внимание!''' Стандартная проверка `pcre2.h` завершается с ошибкой! Не включайте её (разрешается) или найдите причину и путь решения (более сложный вариант).

Сборочные зависимости и адаптация к окружению

Что не умеет Make:

  • TODO

⇒ Makefile ­— это генерат!

Autotools

  • Генерация configure — autoconf

    • + autoheader (сводный .h-файл найденного)

  • Автоматическое конструирование Makefile.in для autoconf — automake

  • Автоматическая проверка зависимостей в .h-файлах — autoscan

  • Переопределение процедур поиска для конкретной системы — aclocal

  • Получение configureautoreconf (последовательность вызова других утилит)

+ libtool для сборки библиотек и компиляции с ними

Картинка по autotools:

Autoconf-automake-process.svg

А попроще?

pkg-config — Только способ запуска gcc для .h и библиотек

Расширения для других make-подобных инструментов.

CMake

  • Аналог automake
  • + Простой входной файл
  • + Разные back-end-ы (make, ninja, VC++-проект, XCode), ...
  • - Собственный модули определения библиотек
  • Поддержка out-of-tree сборки

Пример

Д/З

  1. Прочитать
  2. Обработчик регулярных выражений.
    1. Установить в сборочное окружение
    2. Добейтесь работоспособности двух простых программ:
      • Window.c (собирать с с -lncursesw)

      • pcredemo.c (собирать с -lpcre2-8).

      • Пояснение по работе pcredemo.cДля того, чтобы найти регулярное выражение в строке, надо:

        1. Скомпилировать это РВ (pcre2_compile)

        2. Подготовить структуру данных, в которой будут храниться результаты поиска (pcre2_match_data_create_from_pattern)

        3. Поискать (pcre2_match)

        4. Вывести результат. Обратите внимание на то, что в результат входит таблица ovector, в которой есть сама найденная подстрока, а также её части, соответствующие выделенным компонентам РВ:

             1 $ ./a.out "(zo)(\w+)(b)" "zo-bizoebwHbr"
             2  5: zoebwHb
             3  5: zo
             4  7: ebwH
             5 11: b
             6 
          
          • При установленном locale программа поддерживает многобайтную кодировку за счёт параметра PCRE2_UCP:

             1 $ ./a.out "(*UTF)\w+" "qweФЫВА"
             2  0: qweФЫВА
             3 $ ./a.out "\w+" "qweФЫВА"
             4  0: qwe
             5 
          
    3. Создайте подкаталог 05_Environmental в вашем git-репозитории и напишите программу, которая откроет три окна, в первом введёт RE-шаблон, во втором — строку, а в третьем будет выводить сообщения об ошибках и результат

      • Используйте autotools или cmake с проверкой наличия библиотек и include-файлов

        • Внимание! Почти все имена из pcre.h — это макросы; например pcre2_compile соответствует в libpcre2-8 функции pcre2_compile_8()

        • Внимание! Стандартная проверка pcre2.h завершается с ошибкой! Не включайте её (разрешается) или найдите причину и путь решения (более сложный вариант).

      • Не храните никаких генератов (в т. ч. результаты работы autoreconf, например, Makefile)

        • Предусмотрите цель allclean для удаления таких генератов

      • Предусмотрите параметр configure --without-UTF, который убирает флаг PCRE2_UCP из кода.

    Как-то так :)

    • pcreshow.gif

LecturesCMC/LinuxApplicationDevelopment2020/05_Environmental (последним исправлял пользователь FrBrGeorge 2020-10-15 02:19:17)