Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Функции > Библиотеки > genlib

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 — тип данных библиотеки
  • getd — загрузка всех функций, определённых в директории
  • lib — loads a library of Scilab functions and variables, and sets its name

История

ВерсияОписание
6.0.0
  • Больше не требуется файл names. Опция Names удалена.
  • Если .sci-файл содержит функции, названные не в соответствии с именем файла, то они теперь не являются публичными: их можно увидеть и вызвать только из главной функции.
  • Если библиотека с именем lib_name уже загружена, то директорией по умолчанию dir_name теперь является не её директория (режим обновления), а текущая рабочая директория.
  • Сгенерированный lib-файл теперь является XML-файлом, который может прочитать человек, а не двоичный файл.
  • genlib() теперь не может записать какую-либо переменную в качестве полноправного члена библиотеки.
  • По умолчанию любой .sci-файл теперь перекомпилируется, если его содержимое было изменено, а не, если дата его изменения новее, чем дата .bin-файла.
  • Генерируемые .bin-файлы более не могут быть загружены независимо с помощью load().
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Jul 20 11:21:28 CEST 2021