Используйте 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' };

Примечание

Если путь, который вы задаете в API rtwmakecfg.m, содержит пробелы, процесс сборки не преобразовывает путь к своему эквивалентному непробелу. Если среды сборки, которые вы намереваетесь поддержать, не поддерживают пробелы в путях, обратитесь к Поддержке Процесса сборки Имен папок с Пробелами или Специальными символами (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<|