Как подход к цепочке инструментов, так и подход makefile шаблона для построений позволяют добавлять следующие элементы в созданные makefile:
Исходные папки
Включить папки
Имена библиотек
Объекты модуля
Использование rtwmakecfg эта информация добавляется в make-файл во время операции построения S-функций. rtwmakecfg функция полезна при указании добавленных источников и библиотек для построения модели, содержащей один или несколько блоков S-функций.
Чтобы добавить информацию, относящуюся к S-функции, в make-файл:
Создание языка MATLAB ®rtwmakecfg функции в rtwmakecfg.m файл. Генератор кода связывает этот файл с функцией S в зависимости от расположения папки. Создание функции rtwmakecfg описывает требования для rtwmakecfg функция и данные, которые она возвращает.
Если используется подход makefile шаблона, измените TMF целевого объекта таким образом, чтобы он поддерживал расширение макросов для информации, которая rtwmakecfg функция возвращает. Изменение Makefile шаблона для rtwmakecfg описывает необходимые изменения. Если используется подход toolchain, информация, возвращаемая функцией rtwmakecfg, используется созданным make-файлом; дальнейшая настройка не требуется.
После фазы TLC процесса построения при генерации make-файла генератор кода выполняет поиск rtwmakecfg.m в папке, содержащей файл MEX S-функции. Если он находит файл, процесс построения вызывает rtwmakecfg функция.
Создать rtwmakecfg.m файл, содержащий rtwmakecfg функция в той же папке, что и компонент S-функции (MEX-файл с расширением, зависящим от платформы, например . в системах Microsoft ® Windows ®). Функция должна возвращать структурированный массив, содержащий эти поля.mexext
| Область | Описание |
|---|---|
makeInfo.includePath | Массив ячеек, указывающий дополнительные имена папок включения, организованный как вектор строки. Процесс построения расширяет имена папок в инструкции по включению в созданный make-файл. |
makeInfo.sourcePath | Массив ячеек, указывающий дополнительные имена исходных папок, организованный как вектор строки. Включите имена папок файлов, введенных в поле S-функциональных модулей в диалоговом окне S-Function Block Parameters или в SFunctionModules параметр блока, если они находятся не в той же папке, что и S-функция. Процесс построения расширяет имена папок в правила создания в созданном make-файле. |
makeInfo.sources | Массив ячеек, указывающий дополнительные имена исходных файлов (C или C++), организованный как вектор строки. Не включайте имя S-функции или файлы, введенные в поле S-функциональных модулей в диалоговом окне 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 не применимы к утилите 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<|