И подход набора инструментальных средств и подход 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 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 параметр, чтобы заменить это значение. Смотрите Задают Местоположение Предварительно скомпилированных Библиотек. |
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 содержит пробелы, процесс сборки не преобразует путь к своему эквивалентному непробелу. Если среды сборки, которые вы намереваетесь поддержать, не поддерживают пробелы в путях, обратитесь к Поддержке Процесса сборки Имен папок с Пробелами или Специальными символами.
Расширять информацию что rtwmakecfg
функция генерирует, измените следующие разделы в TMF вашей цели:
Include Path
C Flags
и/или Additional Libraries
Rules
Возможно, что эти примеры кода TMF не применяются к вашему делать утилиту. Для дополнительных примеров смотрите GRT или ERT TMFs, расположенный в
.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<|