genlib строит библиотеку из набора *.sci-файлов, определяющих функции в указанной директории

## Синтаксис

                genlib(lib_name)
                genlib(lib_name, dir_name)
                genlib(lib_name, dir_name, Force)
                genlib(lib_name, dir_name, Force, verb)
                genlib(lib_name [,path=dir_name] [,verbose=verb] [,force=Force])

## Аргументы

lib_name
  Scilab-строка: идентифицирующее имя присваиваемое библиотеку, которую нужно построить.

dir_name
  Scilab-строка: путь к директории, содержащей файлы `.sci`-функций, и где генерируется файл `lib` и определяющая, где будет храниться библиотека. По умолчанию рассматривается текущая рабочая директория.
  Директория `dir_name` directory и её `lib`- и `.bin`-файлы должны иметь право на запись.

Force
  логическое значение (значение по умолчанию `%f`). Установите его в `%t`, чтобы принудить к рекомпиляции sci-файлов.

verb
  логическое значение (значение по умолчанию `%f`). Установите его в `%t`, чтобы отобразить больше информации во время сборки.

## Описание

`genlib(..)` выбирает все файлы, принадлежащие директории `dir_name` и с расширением `.sci`. Поддиректории, если они есть, никогда не рассматриваются. Если требуется, они должны компилироваться отдельно в независимые библиотеки.

Затем создаётся редактируемый XML-файл `lib` в директории `dir_name`. Имя `lib_name` библиотеки записывается в него.

Далее, для каждого `.sci`-файла:

- Если
  - нет связанного `.bin`-файла в `dir_name` с тем же базовым именем (что и для исходной сборки библиотеки), либо
  - содержимое `.sci`-файла было изменено со времени предыдущей сборки,

  `.sci`-файл скомпилирован (почти как если бы это было с `exec(..)`):

  - если он содержит по крайней мере один блок `function .. endfunction`, то двоичный `.bin`-файл с тем же базовым именем генерируется и хранится в `dir_name`. Он содержит бинарный код ВСЕХ функций, определённых в `.sci`-файле исходного кода.

    - Если имя одной из функций, определённой в файле, является базовым именем `.sci`-файла, то эта функция записывается в `lib`-файл.

    - В противном случае, ни одна функция из `.sci`-файла не записывается: всё её содержимое рассматривается как мёртвый код.

    Если файл `test.sci` определяет функцию `test()` И другие функции, такие как sub(), то функции sub() тогда рассматриваются как приватные для test(). Например,

        function r = sub(a)
            r = 2*a
        endfunction

        function test()
            disp("A test")
        endfunction

        function r = other(b)
            r = 2^b
        endfunction
    | эквивалентно |
        function test()
            function r = sub(a)
                r = 2*a
            endfunction
            function r = other(b)
                r = 2^b
            endfunction

            disp("A test")
        endfunction

    Следовательно, sub() и other() не существуют вне test() и не будут записаны в библиотеку.
  - В противном случае, `.bin`-файл не будет генерироваться: всё содержимое `.sci`-файла рассматривается как мёртвый код.
- В противном случае: если содержимое файла не изменилось и уже имеет содержимое функции в `lib`-файле, то это содержимое сохраняется.

Наконец, `genlib(..)` загружает созданную или обновлённую библиотеку и устанавливает её идентификатор в переменную, названную `lib_name`, в текущей области просмотра. Если переменная `lib_name` уже существует и защищена,то возникает ошибка: библиотека была создана, но не может быть загружена (predef all может использоваться для снятия защиты с переменной, названной `lib_name` перед запуском `genlib(..)`).

Если используется опция `force=%t`, то все `.sci`-файлы компилируются, даже если их содержимое не было изменено.

Когда из директории библиотеки некоторые старые .sci-файлы были удалены и при этом оставшиеся .sci-файлы остались неизменными, то пересборка библиотеки без `force=%t` в любом случае обновит список членов библиотеки.

Если включена опция `verbose`, то во время сборки отображается больше информации.

## Смотрите также

- library
- load
- getd
- lib

## История

6.0.0

- Больше не требуется файл `names`. Опция `Names` удалена.
- Если .sci-файл содержит функции, названные не в соответствии с именем файла, то они теперь не являются публичными: их можно увидеть и вызвать только из главной функции.
- Если библиотека с именем `lib_name` уже загружена, то директорией по умолчанию `dir_name` теперь является не её директория (режим обновления), а текущая рабочая директория.
- Сгенерированный `lib`-файл теперь является XML-файлом, который может прочитать человек, а не двоичный файл.
- genlib() теперь не может записать какую-либо переменную в качестве полноправного члена библиотеки.
- По умолчанию любой .sci-файл теперь перекомпилируется, если его содержимое было изменено, а не, если дата его изменения новее, чем дата .bin-файла.
- Генерируемые `.bin`-файлы более не могут быть загружены независимо с помощью load().