Различия между версиями 4 и 5
Версия 4 от 2020-10-14 15:20:10
Размер: 2552
Редактор: FrBrGeorge
Комментарий:
Версия 5 от 2020-10-14 15:56:09
Размер: 4949
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 34: Строка 34:
  * (вариант — сто же самое про CMAKE)
Строка 37: Строка 38:

  библиотеку [[https://www.pcre.org/current/doc/html/index.html|PCRE2]] и её сборочный компонент. В ALT это пакет `libpcre2-devel`.
   * библиотеку [[https://www.pcre.org/current/doc/html/index.html|PCRE2]] и её сборочный компонент. В ALT это пакет `libpcre2-devel`.
  1. Добейтесь работоспособности двух простых программ:
   * [[attachment:Window.c]] (собирать с с `-lncursesw`)
   * [[attachment:pcredemo.c]] (собирать с `-lpcre2-8`). Для того, чтобы найти регулярное выражение в строке, надо:
    1. Скомпилировать это РВ (`pcre2_compile`)
    1. Подготовить структуру данных, в которой будут храниться результаты поиска (`pcre2_match_data_create_from_pattern`)
    1. Поискать (`pcre2_match`)
    1. Вывести результат. Обратите внимание на то, что в результат входит таблица `ovector`, в которой есть сама найденная подстрока, а также её части, соответствующие выделенным компонентам РВ:
    {{{#!highlight console
$ ./a.out "(zo)(\w+)(b)" "zo-bizoebwHbr"
 5: zoebwHb
 5: zo
 7: ebwH
11: b
}}}
     * При установленном locale программа поддерживает многобайтную кодировку за счёт параметра `PCRE2_UCP`:
    {{{#!highlight console
$ ./a.out "(*UTF)\w+" "qweФЫВА"
 0: qweФЫВА
$ ./a.out "\w+" "qweФЫВА"
 0: qwe
    }}}
  1. Создайте подкаталог `05_Environmental` в вашем git-репозитории и напишите программу, которая откроет три окна, в первом введёт RE-шаблон, во втором — строку, а в третьем будет выводить сообщения об ошибках и результат
   * Используйте `autotools` или `cmake` с проверкой наличия библиотек и include-файлов
   * Не храните никаких генератов (в т. ч. результаты работы `autoreconf`, например, `Makefile`)
    * Предусмотрите цель `allclean` для удаления таких генератов
   * Предусмотрите параметр `configure --without-UTF`, который убирает флаг `PCRE2_UCP` из кода.

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

Что не умеет 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). Для того, чтобы найти регулярное выражение в строке, надо:

        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-файлов

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

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

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

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