Подход набора инструментальных средств и подход с шаблоном make-файла для сборок позволяют добавлять следующие элементы к сгенерированным make-файлам:
Исходные папки
Включить папки
Имена библиотек
Объекты модуля
Использование rtwmakecfg
вы добавляете эту информацию в make-файл во время операции сборки для S-функций. rtwmakecfg
функция полезна при указании добавленных источников и библиотек для создания модели, которая содержит один или несколько блоки s-function.
Чтобы добавить информацию, относящуюся к S-функции, в make-файл:
Создайте MATLAB® язык rtwmakecfg
функция в rtwmakecfg.m
файл. Генератор кода связывает этот файл с вашей S-функцией на основе расположения его папки. Создайте функцию rtwmakecfg, описывающую требования к rtwmakecfg
функцию и данные, которые она возвращает.
Если вы используете подход make-файла шаблона, измените TMF вашего целевого объекта так, чтобы он поддерживал расширение макроса для информации, которая rtwmakecfg
функция возвращается. Изменение файла make-файла шаблона для rtwmakecfg описывает необходимые изменения. Если вы используете подход набора инструментальных средств, информация, которую возвращает функция rtwmakecfg, используется сгенерированным make-файлом; строение не требуется.
После фазы TLC процесса сборки, при генерации make-файла, генератор кода ищет rtwmakecfg.m
файл в папке, содержащей файл MEX S-функции. Если он находит файл, процесс сборки вызывает rtwmakecfg
функция.
Создайте rtwmakecfg.m
файл, содержащий rtwmakecfg
функция в той же папке, что и компонент S-функции (MEX-файл с зависящим от платформы расширением, например
на Microsoft® Windows® систем). Функция должна вернуть структурированный массив, содержащий эти поля.mexext.
Область | Описание |
---|---|
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 содержит пространства, процесс сборки не преобразует путь в его непространственный эквивалент. Если поддерживаемые окружения сборки не поддерживает пространств в путях, обратитесь к разделу Поддержка процесса сборки имен папок с Пространствами или специальными символами.
Чтобы развернуть информацию, которая rtwmakecfg
функция генерирует, изменяет следующие разделы в TMF вашего целевого устройства:
Include Path
C Flags
и/или Additional Libraries
Rules
Возможно, эти примеры кода TMF не применяются к вашей утилите make. Для дополнительных примеров смотрите GRT или ERT TMF, расположенные в
.matlabroot
/ toolbox/coder/compile/tmf
Следующий пример кода TMF добавляет имена папок в путь включения в сгенерированный make-файл:
ADD_INCLUDES = \ |>START_EXPAND_INCLUDES<| -I|>EXPAND_DIR_NAME<| \ |>END_EXPAND_INCLUDES<|
Кроме того, ADD_INCLUDES
макрос должен быть добавлен в INCLUDES
линия.
INCLUDES = -I. -I.. $(ADD_INCLUDES) $(USER_INCLUDES)
Следующий пример кода 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<|
Для получения дополнительной информации смотрите Расположение библиотеки управления и Именование во время сборки.
Пример кода 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<|