Управляйте местоположением библиотеки и называющий во время сборки

Когда вы генерируете предварительно скомпилированный, непредварительно скомпилированный, и библиотеки модели - ссылки, можно управлять местоположением библиотеки и именем библиотеки при помощи параметров конфигурации. Эти параметры управляют значениями в сгенерированных make-файлах во время сборок модели:

  • Для процессов сборки, которые используют подход набора инструментальных средств, управляйте сгенерированным местоположением библиотеки при помощи параметра конфигурации TargetPreCompLibLocation.

  • Для процессов сборки, которые используют подход make-файла шаблона, управляйте сгенерированным местоположением библиотеки при помощи параметра конфигурации TargetPreCompLibLocation и управляйте сгенерированным именем библиотеки при помощи параметра конфигурации TargetLibSuffix.

Параметры управления библиотеки

Используйте параметры управления библиотеки для:

  • Задайте местоположение предварительно скомпилированных библиотек, таких как библиотеки blockset или библиотека блоков Simulink® Coder™. Как правило, цель кросс-скомпилировала версии этих библиотек и размещает их в целевую папку.

  • Управление суффикс применилось к именам файлов библиотеки (например, _target.a или _target.lib).

Цели могут установить параметры в коллбэке выбора системного конечного файла (STF). Например:

function mytarget_select_callback_handler(varargin)
    hDig=varargin{1};
    hSrc=varargin{2};
    slConfigUISetVal(hDig, hSrc, 'TargetPreCompLibLocation',...
    'c:\mytarget\precomplibs');
    slConfigUISetVal(hDig, hSrc, 'TargetLibSuffix',...
    '_target.library');

TMF имеет соответствующие лексемы расширения:

    |>EXPAND_LIBRARY_LOCATION<|
    |>EXPAND_LIBRARY_SUFFIX<|

Также можно использовать вызов функции set_param. Например:

set_param(model,'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

Примечание

Если ваша модель содержит модели, на которые ссылаются, можно использовать сделать опцию USE_MDLREF_LIBPATHS, чтобы управлять, копируются ли библиотеки, пользовавшиеся моделями, на которые ссылаются, в папку сборки родительской модели. Для получения дополнительной информации смотрите Управление Местоположение Библиотек Модели - ссылки.

Идентифицируйте тип файла библиотеки для подхода набора инструментальных средств

Подход набора инструментальных средств для сборок модели не использует значение параметра конфигурации TargetLibSuffix, чтобы выбрать имя файла библиотеки suffix и extension.

С подходом набора инструментальных средств итоговое бинарное имя состоит из modelname, compilername и extension, обеспеченного описанием инструмента сборки в определении набора инструментальных средств:

model_compilername.extension

Можно идентифицировать статическое расширение файла библиотеки из описания инструмента сборки в определении набора инструментальных средств. Чтобы получить эту информацию для набора инструментальных средств по умолчанию, используйте эту процедуру:

  1. Получите имя набора инструментальных средств по умолчанию. Например, введите:

    tc_name = coder.make.getDefaultToolchain()
  2. Получите указатель набора инструментальных средств по умолчанию. Например, введите:

    tc = coder.make.getToolchainInfoFromRegistry(tc_name)
  3. Получите указатель на объект набора инструментальных средств. Например, введите:

    tool_archiver = tc.getBuildTool('Archiver');
  4. Получите расширение. Например, введите:

    ext_archiver = tool_archiver.getFileExtension('Static Library');

Примечание

Если вы не устанавливаете параметр TargetLibSuffix, обрабатываете make-файл по шаблону, и подходы набора инструментальных средств производят то же статическое имя файла библиотеки extension. Смотрите Настраивают Суффикс Файла Библиотеки и Тип файла.

Задайте местоположение предварительно скомпилированных библиотек

Используйте параметр конфигурации TargetPreCompLibLocation для:

Для предварительно скомпилированной библиотеки, такой как blockset библиотека или библиотека блоков Simulink Coder, местоположение, заданное в rtwmakecfg.m, обычно является местоположением, характерным для blockset или продукта Simulink Coder. Генератор кода ожидает, что библиотека существует в этом месте и ссылках против библиотеки во время сборок.

Для некоторых приложений, таких как пользовательские цели, желательно определять местоположение предварительно скомпилированных библиотек в целевом или другом альтернативном месте, а не в месте, заданном в rtwmakecfg.m. Для пользовательской цели генератор кода ожидает, что целевой кросс-компилятор создает библиотеку, и вы размещаете библиотеку в целевое местоположение. Скомпилируйте и разместите библиотеки, поддержанные к установленному сроку в целевом месте, таким образом, они могут использоваться во время процесса сборки.

Можно настроить параметр TargetPreCompLibLocation в его избранном коллбэке. Путь, который вы задаете для параметра, должен быть полностью определенным, абсолютным путем к местоположению библиотеки. Относительные пути не поддержаны. Например:

slConfigUISetVal(hDlg, hSrc, 'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

Также вы устанавливаете параметр с вызовом функции set_param. Например:

set_param(model,'TargetPreCompLibLocation',...
'c:\mytarget\precomplibs');

Во время генерации make-файла процесс сборки заменяет лексемы на местоположение из файла rtwmakecfg.m. Например, если именем библиотеки в файле rtwmakecfg.m является 'rtwlib', подход сборки make-файла шаблона расширяет лексему от:

LIBS += |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|\
_target.library

к:

LIBS += c:\mytarget\precomplibs\rtwlib_target.library

По умолчанию TargetPreCompLibLocation является пустым символьным вектором. Процесс сборки использует местоположение в rtwmakecfg.m для маркерной замены.

Управляйте местоположением библиотек модели - ссылки

На платформах кроме платформы Apple Macintosh , при создавании модели, которая использует модели, на которые ссылаются, процесс сборки по умолчанию включает:

  • Скопируйте библиотеки, которыми модели, на которые ссылаются, пользуются к папке сборки родительской модели.

  • Присвойте имена файлов библиотек к MODELREF_LINK_LIBS в сгенерированном make-файле.

Например, если модель включает модель sub, на которую ссылаются, процесс сборки присваивает имя библиотеки sub_rtwlib.lib MODELREF_LINK_LIBS. Процесс сборки копирует файл библиотеки в папку сборки родительской модели. Это определение затем используется в строке последней ссылки, которая соединяет библиотеку в конечный продукт (обычно исполняемый файл). Этот метод минимизирует длину строки ссылки.

На платформе Macintosh, и опционально на других платформах, процесс сборки включает:

  • Никакое копирование библиотек, которыми модели, на которые ссылаются, пользуются к папке сборки родительской модели.

  • Присвойте относительные пути и имена файлов библиотек к MODELREF_LINK_LIBS в сгенерированном make-файле.

При использовании этого метода процесс сборки присваивает относительный путь, такой как ../slprj/grt/sub/sub_rtwlib.lib к MODELREF_LINK_LIBS. Процесс сборки использует путь, чтобы получить доступ к файлу библиотеки во время ссылки.

Чтобы измениться на поведение не по умолчанию на платформах кроме платформы Macintosh, выберите Configuration Parameters> Code Generation> поле команды Make. Войдите:

make_rtw USE_MDLREF_LIBPATHS=1 

Если вы задаете другой Делать аргументы команды, такие как OPTS="-g", порядок, в котором вы задаете, несколько аргументов не имеет значения.

Чтобы возвратиться к поведению по умолчанию, установите USE_MDLREF_LIBPATHS на 0 или удалите его.

Управляйте суффиксом, примененным имена файлов библиотеки

С подходом make-файла шаблона для сборок модели использование параметр конфигурации TargetLibSuffix, чтобы управлять суффиксом, применился к именам библиотеки (например, _target.lib или _target.a). Заданная суффиксная схема должна включать период (.). Можно применить TargetLibSuffix к следующим библиотекам:

  • Библиотеки, от которых цель зависит, как задано в API rtwmakecfg.m. Можно использовать TargetLibSuffix, чтобы изменить суффикс и предварительно скомпилированных и непредварительно скомпилированных библиотек, сконфигурированных от API rtwmakecfg. Для получения дополнительной информации смотрите Использование rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы.

    В этом случае цель может установить параметр в своем избранном коллбэке. Например:

    slConfigUISetVal(hDlg, hSrc, 'TargetLibSuffix',...
    '_target.library');

    Также можно использовать вызов функции set_param. Например:

    set_param(model,'TargetLibSuffix','_target.library');

    Во время преобразования TMF к make-файлу процесс сборки заменяет маркерный |>EXPAND_LIBRARY_SUFFIX<| на заданный суффикс. Например, если именем библиотеки, заданным в файле rtwmakecfg.m, является 'rtwlib', TMF расширяется от:

    LIBS += |>EXPAND_LIBRARY_LOCATION<|\|>EXPAND_LIBRARY_NAME<|\
    |>EXPAND_LIBRARY_SUFFIX<|

    к:

    LIBS += c:\mytarget\precomplibs\rtwlib_target.library

    По умолчанию TargetLibSuffix установлен в пустой символьный вектор. В этом случае процесс сборки заменяет маркерный |>EXPAND_LIBRARY_SUFFIX<| на пустой символьный вектор.

  • Образцовые библиотеки создаются с моделью - ссылкой. Для этих случаев сопоставленные переменные make-файла не требуют лексемы |>EXPAND_LIBRARY_SUFFIX<|. Вместо этого процесс сборки включает TargetLibSuffix неявно. Например, для топ-модели под названием topmodel с моделями, на которые ссылаются, под названием refmodel1 и refmodel2, TMF топ-модели расширен от:

    MODELLIB           = |>MODELLIB<|
    MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<|

    к:

    MODELLIB           = topmodellib_target.library
    MODELREF_LINK_LIBS = \
    refmodel1_rtwlib_target.library refmodel2_rtwlib_target.library

    По умолчанию параметр TargetLibSuffix является пустым символьным вектором. В этом случае процесс сборки выбирает суффикс по умолчанию для этих трех лексем с помощью расширения файла .lib на хостах Windows® и .a на хостах UNIX®. Для библиотек модели - ссылки суффикс по умолчанию также включает _rtwlib. Например, на хосте Windows, расширенные значения make-файла:

    MODELLIB           = topmodellib.lib
    MODELREF_LINK_LIBS = refmodel1_rtwlib.lib refmodel2_rtwlib.lib