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