Используйте rtwmakecfg.m API, чтобы Настроить Сгенерированные Make-файлы

И подход набора инструментальных средств и подход make-файла шаблона для сборок позволяют вам добавить следующие элементы в сгенерированные make-файлы:

  • Исходные папки

  • Включайте папки

  • Имена библиотеки

  • Объекты модуля

О Функции rtwmakecfg

Используя rtwmakecfg функция, вы добавляете эту информацию в make-файл во время операции сборки для S-функций. rtwmakecfg функция полезна при определении добавленных источников и библиотек, чтобы создать модель, которая содержит один или несколько Блоков s-function.

Добавить информацию, имеющую отношение к S-функции к make-файлу:

  1. Создайте язык MATLAB® rtwmakecfg функция в rtwmakecfg.m файл. Генератор кода сопоставляет этот файл с вашей S-функцией на основе ее местоположения папки. Создайте Функцию rtwmakecfg, описывает требования для rtwmakecfg функционируйте и данные, которые это возвращает.

  2. Если вы используете подход make-файла шаблона, изменяете TMF вашей цели, таким образом, что это поддерживает макрорасширение для получения информации что rtwmakecfg функция возвращается. Измените Make-файл Шаблона для rtwmakecfg, описывает необходимые модификации. Если вы используете подход набора инструментальных средств, информация, которую возвращает rtwmakecfg функция, используется сгенерированным make-файлом; никакая дальнейшая настройка не требуется.

После фазы TLC процесса сборки, при генерации make-файла, генератор кода ищет rtwmakecfg.m файл в папке, которая содержит файл MEX S-функции. Если это находит файл, процесс сборки вызывает rtwmakecfg функция.

Создайте Функцию rtwmakecfg

Создайте rtwmakecfg.m файл, содержащий rtwmakecfg функция в той же папке как ваш компонент S-функции (файл MEX с зависимым платформой расширением, таким как.mexext в системах Microsoft® Windows®). Функция должна возвратить структурированный массив, который содержит эти поля.

Поле Описание
makeInfo.includePathМассив ячеек, который задает дополнительный, включает имена папок, организованные как вектор-строка. Процесс сборки расширяется, имена папок во включают инструкции в сгенерированный make-файл.
makeInfo.sourcePathМассив ячеек, который задает дополнительные исходные имена папок, организованные как вектор-строка. Включайте имена папок файлов, ввел в поле S-function modules на диалоговом окне S-Function Block Parameters или в SFunctionModules параметр блока, если они не находятся в той же папке как S-функция. Процесс сборки расширяется, имена папок в делают правила в сгенерированном make-файле.
makeInfo.sourcesМассив ячеек, который задает дополнительные имена исходного файла (C или C++), организованный как вектор-строка. Не включайте имя S-функции, или файлы ввели в поле S-function modules на диалоговом окне S-Function Block Parameters или в SFunctionModules параметр блока. Процесс сборки расширяется, имена файлов в делают переменные, которые содержат исходные файлы. Задайте только имена файлов (с расширением). Укажите информацию пути с sourcePath поле .
makeInfo.linkLibsObjsМассив ячеек, который задает дополнительные, полностью определенные пути к объекту или файлам библиотеки, против которых соединяется сгенерированный код. Процесс сборки не компилирует заданные объекты и библиотеки. Однако это включает их при соединении итогового исполняемого файла. Это включение может быть полезно для слияния библиотек, которые вы не хотите, чтобы процесс сборки перекомпилировал или для которого исходные файлы не доступны. Можно также использовать этот элемент, чтобы интегрировать исходные файлы с языков кроме C и C++. Это интегрирование возможно, если вы сначала создаете совместимый объектный файл C или библиотеку за пределами процесса сборки.
makeInfo.precompileБулев флаг, который указывает, задали ли библиотеки в rtwmakecfg.m файл существует в заданном месте (precompile==1) или если необходимо создать библиотеки в папке сборки во время процесса сборки (precompile==0).
makeInfo.libraryМассив структур, который задает дополнительные библиотеки времени выполнения и объекты модуля, организованные как вектор-строка. Процесс сборки расширяется, информация в делают правила в сгенерированном make-файле. Для списка полей библиотеки см. следующую таблицу.

makeInfo.library поле состоит из следующих элементов.

ЭлементОписание
makeInfo.library(n).NameСимвольный массив, который задает имя библиотеки (без расширения).
makeInfo.library(n).LocationСимвольный массив, который задает папку, в которой библиотека расположена, когда предварительно скомпилировано. Для получения дополнительной информации см. описание makeInfo.precompile в предыдущей таблице. Цель может использовать TargetPreCompLibLocation параметр, чтобы заменить это значение. Смотрите Задают Местоположение Предварительно скомпилированных Библиотек (Simulink Coder).
makeInfo.library(n).ModulesМассив ячеек, который задает C или базовые имена исходного файла C++ (без расширения), которые включают библиотеку. Не включайте расширение файла. Make-файл добавляет объектное расширение.

Примечание

makeInfo.library поле должно полностью задать каждую библиотеку и как создать его. Модули перечисляют в makeInfo.library(n).Modules элемент не может быть пустым. Чтобы задать библиотеку только для ссылки, используйте makeInfo.linkLibsObjs поле вместо этого.

Пример:

 disp(['Running rtwmakecfg from folder: ',pwd]);
    makeInfo.includePath = { fullfile(pwd, 'somedir2') };
    makeInfo.sourcePath = {fullfile(pwd, 'somedir2'), fullfile(pwd, 'somedir3')};
    makeInfo.sources  = { 'src1.c', 'src2.cpp'};
    makeInfo.linkLibsObjs = { fullfile(pwd, 'somedir3', 'src3.object'),...
                              fullfile(pwd, 'somedir4', 'mylib.library')};
    makeInfo.precompile = 1;
    makeInfo.library(1).Name     = 'myprecompiledlib';
    makeInfo.library(1).Location = fullfile(pwd,'somdir2','lib');
    makeInfo.library(1).Modules  = {'srcfile1' 'srcfile2' 'srcfile3' };

Примечание

Если путь, который вы задаете в rtwmakecfg.m API содержит пробелы, процесс сборки не преобразует путь к своему эквивалентному непробелу. Если среды сборки, которые вы намереваетесь поддержать, не поддерживают пробелы в путях, обратитесь к Поддержке Процесса сборки Имен папок с Пробелами или Специальными символами (Simulink Coder).

Измените Make-файл Шаблона для rtwmakecfg

Расширять информацию что rtwmakecfg функция генерирует, измените следующие разделы в TMF вашей цели:

  • Include Path

  • C Flags и/или Additional Libraries

  • Rules

Возможно, что эти примеры кода TMF не применяются к вашему делать утилиту. Для дополнительных примеров смотрите GRT или ERT TMFs, расположенный в matlabroot/rtw/c/grt (открытый) или matlabroot/rtw/c/ert открытый.

Добавьте, что имена папок к make-файлу включают путь

Следующий пример кода TMF добавляет имена папок к включать пути в сгенерированном make-файле:

ADD_INCLUDES = \
|>START_EXPAND_INCLUDES<|   -I|>EXPAND_DIR_NAME<| \
|>END_EXPAND_INCLUDES<|

Кроме того, ADD_INCLUDES макрос должен быть добавлен к INCLUDES строка.

INCLUDES = -I. -I.. $(ADD_INCLUDES) $(USER_INCLUDES)

Добавьте имена библиотеки к make-файлу

Следующий пример кода TMF добавляет имена библиотеки к сгенерированному make-файлу.

LIBS =
|>START_PRECOMP_LIBRARIES<|
LIBS += |>EXPAND_LIBRARY_NAME<|.a |>END_PRECOMP_LIBRARIES<|
|>START_EXPAND_LIBRARIES<|
LIBS += |>EXPAND_LIBRARY_NAME<|.a |>END_EXPAND_LIBRARIES<|

Для получения дополнительной информации смотрите Местоположение Библиотеки Управления и Называющий Во время Сборки.

Добавьте правила в make-файл

Пример кода TMF добавляет правила в сгенерированный make-файл.

|>START_EXPAND_RULES<|
$(BLD)/%.o: |>EXPAND_DIR_NAME<|/%.c $(SRC)/$(MAKEFILE) rtw_proj.tmw
    @$(BLANK)
    @echo ### "|>EXPAND_DIR_NAME<|\$*.c"
    $(CC) $(CFLAGS) $(APP_CFLAGS) -o $(BLD)$(DIRCHAR)$*.o \
    |>EXPAND_DIR_NAME<|$(DIRCHAR)$*.c > $(BLD)$(DIRCHAR)$*.lst
|>END_EXPAND_RULES<|

|>START_EXPAND_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
|>START_EXPAND_MODULES<|    |>EXPAND_MODULE_NAME<|.o \
|>END_EXPAND_MODULES<|

|>EXPAND_LIBRARY_NAME<|.a : $(MAKEFILE) rtw_proj.tmw
$(MODULES_|>EXPAND_LIBRARY_NAME<|:%.o=$(BLD)/%.o)
    @$(BLANK)
    @echo ### Creating $@
    $(AR) -r $@ $(MODULES_|>EXPAND_LIBRARY_NAME<|:%.o=$(BLD)/%.o)
|>END_EXPAND_LIBRARIES<|

|>START_PRECOMP_LIBRARIES<|MODULES_|>EXPAND_LIBRARY_NAME<| = \
|>START_EXPAND_MODULES<|    |>EXPAND_MODULE_NAME<|.o \
|>END_EXPAND_MODULES<|

|>EXPAND_LIBRARY_NAME<|.a : $(MAKEFILE) rtw_proj.tmw
$(MODULES_|>EXPAND_LIBRARY_NAME<|:%.o=$(BLD)/%.o)
    @$(BLANK)
    @echo ### Creating $@
    $(AR) -r $@ $(MODULES_|>EXPAND_LIBRARY_NAME<|:%.o=$(BLD)/%.o)
|>END_PRECOMP_LIBRARIES<|