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

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

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

Autotools

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

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

Autoconf-automake-process.svg

А попроще?

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

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

CMake

Пример

Д/З

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

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

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

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