Используйте 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 Parameters или в SFunctionModules параметр блока, если они находятся не в той же папке, что и S-функция. Процесс сборки расширяет имена папок на правила создания в сгенерированном файле make.
makeInfo.sourcesМассив ячеек, который задает дополнительные имена исходных файлов (C или C++), организованный как вектор-строка. Не включать имя S-функции или файлов, введенных в поле S-function modules в диалоговом окне Блок S-function Parameters или в SFunctionModules параметр блока. Процесс сборки расширяет имена файлов до переменных make, которые содержат исходные файлы. Задайте только имена файлов (с расширением). Задайте информацию о пути с помощью sourcePath поле.
makeInfo.linkLibsObjsМассив ячеек, который задает дополнительные, полные пути к файлам объекта или библиотеки, с которыми связан сгенерированный код. Процесс сборки не компилирует указанные объекты и библиотеки. Однако он включает их при связывании окончательного исполняемого файла. Это включение может быть полезно для включения библиотек, которые вы не хотите повторно компилировать процесс сборки или для которых исходные файлы недоступны. Можно также использовать этот элемент для интеграции исходных файлов с языков, отличных от C и C++. Это интегрирование возможно, если вы сначала создали совместимый с C файл объекта или библиотеку вне процесса сборки.
makeInfo.precompileЛогический флаг, указывающий, заданы ли библиотеки в rtwmakecfg.m файл существует в заданном местоположении (precompile==1) или если необходимо создать библиотеки в папке сборки в процессе сборки (precompile==0).
makeInfo.libraryМассив структур, который задает дополнительные библиотеки во время выполнения и объекты модулей, организованные как вектор-строка. Процесс сборки расширяет информацию в правила создания в сгенерированном make-файле. Список библиотечных полей см. в следующей таблице.

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

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

Примечание

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

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

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

  • Include Path

  • C Flags и/или Additional Libraries

  • Rules

Возможно, эти примеры кода TMF не применяются к вашей утилите make. Для дополнительных примеров смотрите GRT или ERT TMF, расположенные в matlabroot/ toolbox/coder/compile/tmf.

Добавление имен папок в путь 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<|