clibgen.generateLibraryDefinition

Создайте файл определения для библиотеки C++

Описание

пример

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,'Libraries',LibraryFiles) создает MATLAB® Файл определения Live Code, используемый для генерации интерфейса MATLAB к библиотеке C++, заданной InterfaceGenerationFiles и LibraryFiles. Для примеров, чтобы вызвать clibgen.generateLibraryDefinition, см. раздел «Какие файлы у вас в библиотеке?» в советах».

Имя файла определения задается libName.mlx. Для получения дополнительной информации об использовании этого файла смотрите Задать интерфейс MATLAB для библиотеки C++. По умолчанию libName - имя первого файла, заданное в InterfaceGenerationFiles. Если вы задаете более одного файла генерации интерфейса, то необходимо использовать PackageName аргумент пары "имя-значение".

Используйте build метод для создания интерфейса. Вам нужен MATLAB-поддерживаемый компилятор C++. Необходимо создать библиотеку интерфейсов с помощью того же компилятора, который использовался для создания библиотеки C++. Если ваша библиотека полностью определена исходными файлами (не использует общий файл библиотеки), то можно выбрать любой поддерживаемый компилятор C++, чтобы создать библиотеку интерфейсов.

пример

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,'Libraries',LibraryFiles,'SupportingSourceFiles',SourceFiles) создает файл определения в библиотеке, заданной несколькими заголовочными файлами, исходными файлами и, при необходимости, общими файлами библиотеки.

пример

clibgen.generateLibraryDefinition(InterfaceGenerationFiles) создает файл определения для библиотеки, полностью заданной как InterfaceGenerationFiles.

Если ваша библиотека включает файл общей библиотеки, необходимо задать 'Libraries' аргумент.

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,___,Name,Value) создает файл с помощью одного или нескольких аргументов пары "имя-значение". Используйте эту опцию с любыми комбинациями входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Сгенерируйте файл определения библиотеки definematrixOperations.mlx от matrixOperations.hpp заголовочный файл в Windows®. Для Linux® пример см. в разделе Публикация интерфейса в общей библиотеке C++ на Linux.

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.hpp");
iPath = fullfile(matlabroot,"extern","examples","cpp_interface");
libFile = fullfile(matlabroot,"extern","examples","cpp_interface",...
    "win64","mingw64","matrixOperations.lib");

clibgen.generateLibraryDefinition(headerFile,"IncludePath", iPath,"Libraries", libFile)
Using MinGW64 Compiler (C++) compiler.
Generated definition file definematrixOperations.mlx and data file 'matrixOperationsData.xml' 
contain definitions for 10 constructs supported by MATLAB.
5 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in definematrixOperations.mlx.
Build using build(definematrixOperations).

Сгенерируйте файл определения библиотеки definematrixOps.mlx от matrixOperations.hpp и matrixOperations.cpp файлы.

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.hpp");
sourceFile = fullfile(matlabroot,"extern","examples","cpp_interface","matrixOperations.cpp");
iPath = fullfile(matlabroot,"extern","examples","cpp_interface");

clibgen.generateLibraryDefinition(headerFile,...
    "SupportingSourceFiles",sourceFile,...
    "IncludePath", iPath,...
    "PackageName","matrixOps")
Using MinGW64 Compiler (C++) compiler.
Generated definition file definematrixOps.mlx and data file 'matrixOpsData.xml' 
contain definitions for 10 constructs supported by MATLAB.
5 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in definematrixOps.mlx.
Build using build(definematrixOps).

Сгенерируйте файл определения библиотеки defineschool.mlx от school.hpp заголовочный файл.

headerFile = fullfile(matlabroot,"extern","examples","cpp_interface","school.hpp");
clibgen.generateLibraryDefinition(headerFile)
Using MinGW64 Compiler (C++) compiler.
Generated definition file defineschool.mlx and data file 'schoolData.xml' contain definitions for 
21 constructs supported by MATLAB.
1 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in defineschool.mlx.
Build using build(defineschool).

Входные параметры

свернуть все

Один или несколько файлов C++ для генерации интерфейса, заданных как строковые массивы, вектор символов или массив ячеек из векторов символов. Если не в текущей папке или на пути MATLAB, то имя включает полный или относительный путь к файлу.

Файлы для определения InterfaceGenerationFiles и SupportingSourceFiles:

  • Заголовочные файлы с расширениями .h, .hpp, или .hxx. Также поддерживается заголовочный файл без расширения. Код в .h заголовочные файлы должны быть C++ совместимыми Кодами С.

    Если вы задаете более одного файла генерации интерфейса, то необходимо использовать PackageName аргумент.

  • Исходный код файлов кода с расширениями .cpp или .cxx.

  • Для получения дополнительной информации см. раздел «Какие файлы у вас есть в библиотеке?» в советах».

Эти файлы должны содержать объявления всех функций, экспортируемых библиотекой. Вы должны иметь возможность скомпилировать их в среде разработки C++ и использовать функциональность в приложениях C++. Если библиотека полностью определяется файлами заголовков (библиотека только для заголовков), то файл библиотеки вам не нужен.

Если основной заголовочный файл содержит #include операторы для заголовочных файлов в разных папках, затем используйте IncludePath аргумент для задания этих путей.

Если вы задаете одно имя файла заголовка, MATLAB ищет библиотеку с таким же именем в той же папке, что и файл заголовка. Библиотека должна иметь расширение имени файла для конкретной платформы. Если библиотека имеет другое имя и/или находится не в той же папке, используйте Libraries аргумент.

MATLAB записывает файлы интерфейса в подпапку в текущей папке, если вы не задаете OutputFolder аргумент. Имя подпапки является именем первого файла заголовка без расширения файла. Для примера этот оператор создаёт файл библиотеки интерфейсов в подпапке myHeader в текущей папке.

clibgen.generateLibraryDefinition("myHeader.hpp")

Пример: "sample.hpp"

Типы данных: char | string | cell

Одно или несколько имен файлов общей библиотеки, заданных как строковые массивы, вектор символов или массив ячеек векторов символов. Используйте с 'Libraries' аргумент пары "имя-значение". Это значение требуется, кроме тех случаев, когда библиотека полностью определяется файлами, заданными в InterfaceGenerationFiles аргумент и аргумент пары "имя-значение" 'SupportingSourceFiles'.

Библиотека является одной из следующих:

  • На платформах Windows:

    • Для статических библиотек задайте .lib файл. Для примера:

      clibgen.generateLibraryDefinition("A.hpp","Libraries","A.lib")
    • Для общих библиотек задайте .lib импортировать файл библиотеки.

      Если на .lib файл недоступен, и библиотека соответствует поддерживаемой Microsoft® Визуальная студия® компилятор, тогда можно задать .dll файл библиотеки динамических ссылок. Для примера:

      clibgen.generateLibraryDefinition("A.hpp","Libraries","A.dll")
  • На платформах Linux задайте .so файл общего объекта.

  • На платформах macOS задайте .dylib файл динамической общей библиотеки.

Для примера этот оператор создает definesample.mlx использование myLib.lib в C:\myLib\ и записывает его в текущую папку.

clibgen.generateLibraryDefinition("sample.hpp","Libraries","C:\myLib\myLib.lib")

Типы данных: char | string | cell

Один или несколько исходных файлов C++, заданных как строковые массивы, вектор символов или массив ячеек из векторов символов. Используйте с 'SupportingSourceFiles' аргумент пары "имя-значение". Поддерживаемые расширения файлов .cpp и .cxx. Если не в текущей папке или на пути MATLAB, то имя включает полный или относительный путь к файлу. Вспомогательный исходный файл должен содержать код С++.

Для получения дополнительной информации см. раздел «Какие файлы у вас есть в библиотеке?» в советах».

Если библиотека полностью задана заголовками и .cpp исходные файлы, тогда общие файлы библиотеки не требуются.

Пример: "sample.cpp"

Типы данных: char | string | cell

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: clibgen.generateLibraryDefinition ([«hfile1.hpp», «hfile2.hpp»], «Libraries», «hfile1.lib»,...
«IncludePath», «C :\mylib\include», «PackageName», «mylib», «OutputFolder», «C :\work»...
DefinedMacros, [«mymacro1», «mymacro2 = 0»], «UndefinedMacros», «mymacro3»);

Одна или несколько папок для включенных заголовочных файлов, заданных как строковые массивы, вектор символов или массив ячеек из векторов символов. Каждое значение в IncludePath должно быть полное имя пути к папкам, включаемым во время компиляции заголовочных файлов.

Если основной заголовочный файл содержит #include операторы для заголовочных файлов в разных папках, затем используйте IncludePath аргумент для задания этих путей.

Типы данных: char | string | cell

Имя папки, используемое для генерации файла определения, заданное как строковый скаляр или вектор символов. Проверьте, что папка находится в пути MATLAB, прежде чем вызывать build функция. Этот оператор создает definemyHeader.mlx в C:\work.

clibgen.generateLibraryDefinition("myHeader.hpp","OutputFolder","C:\work")

Типы данных: char | string | cell

Имя пакета сгенерированного интерфейса, заданное как строковый скаляр или вектор символов. Для получения дополнительной информации см. раздел Вызова функций в общей библиотеке C++.

Для интерфейсов, созданных из одного заголовочного файла, значение по умолчанию является именем заголовка. Для нескольких заголовочных файлов необходимо задать имя пакета как допустимое имя MATLAB. Для примера этот оператор создает definemylib.mlx в текущей папке.

clibgen.generateLibraryDefinition(["h1.hpp","h2.hpp"],"PackageName","mylib")

Типы данных: char | string | cell

Опция для отображения сообщений генерации, заданная как true или false. Если Verbose является trueMATLAB отображает сообщения генерации в командном окне при создании файла определения. Этот оператор создает defineh1.mlx и отображает сообщения в командное окно.

clibgen.generateLibraryDefinition("h1.hpp","Verbose",true)

Дополнительные сведения см. в разделе Сообщения о неподдерживаемых типах.

Типы данных: logical

Спецификатор формы для указателей на объекты, заданный как true или false. Если TreatObjectPointerAsScalar является true, затем MATLAB обрабатывает все указатели на объекты в библиотеке как скаляры путем определения SHAPE как 1. В противном случае форма указателя на объект неизвестна.

Типы данных: logical

Спецификатор фигуры и типа MATLAB для const символьные указатели, заданные как true или false. Если TreatConstCharPointerAsCString является true, затем MATLAB обрабатывает все const указатели на символы в библиотеке в виде строк C, завершенных значением null, путем определения MLTYPE как string и SHAPE как nullTerminated. В противном случае тип MATLAB и форма const указатели на символы неизвестны. Поддерживаемые типы указателей:

  • const char *

  • const wchar_t *

  • const char16_t *

  • const char32_t *

Типы данных: logical

Список определений макросов, используемых при анализе заголовочных файлов, заданный как пустой, скалярная строка или вектор-строка скалярных строк. Имя макроса содержит символы 1-9, a-z, A-Z и '_' и не может начинаться с цифры.

Типы данных: string

Список отмененных макросов, используемых при анализе заголовочных файлов, заданный как пустой, скалярная строка или вектор-строка скалярных строк. Имя макроса содержит символы 1-9, a-z, A-Z и '_' и не может начинаться с цифры.

Типы данных: string

Будет ли создаваться документация из файлов C++, заданная как true или false. Если GenerateDocumentationFromHeaderFiles является true, затем MATLAB генерирует документацию из комментариев в исходных файлах C++ для отображения с помощью MATLAB doc команда. Если falseMATLAB игнорирует комментарии C++ и только генерирует документацию отображений типов MATLAB и C++.

Для получения дополнительной информации см. раздел «Публикация текста справки для интерфейса MATLAB в библиотеке C++».

Типы данных: logical

Возвращать ли необъект массивы C, задается как true или false. Если ReturnCArrays является true, затем MATLAB возвращает массивы C (clib.array.*) для необъект массивов C. Если false, затем MATLAB возвращает числовые массивы MATLAB для необъект массивов C.

Типы данных: logical

Ограничения

  • Сохранение LibraryDefinition definelibName объекта в MAT-файл не поддерживается.

  • Избегайте символов, отличных от ASCII, в именах папок и файлов, так как некоторые установки локализации могут не поддерживать эти символы. Для получения информации о локали смотрите Концепции установки локализации для интернационализации.

Совет

  • Чтобы воссоздать файл определения библиотеки, сначала удалите libName define.mlx файл, а затем вызов clibgen.generateLibraryDefinition.

  • Для получения информации об устранении неполадок смотрите Поиск и устранение проблем с интерфейсами C++.

  • Библиотека может содержать комбинации заголовочных файлов, исходных файлов CPP и общих библиотечных файлов. В этой таблице показано, как задать аргументы clibgen.generateLibraryDefinition в зависимости от того, какие типы файлов определяют вашу библиотеку.

    Какие файлы у вас в библиотеке?

    Аргумент
    InterfaceGenerationFiles
    Аргумент пары "имя-значение"
    "Libraries"
    Аргумент пары "имя-значение"
    "SupportingSourceFiles"

    Один файл заголовка и импорт файла библиотеки в Windows.

    • A.hpp

    • A.lib импорт файла библиотеки в папку C:\Documents\MATLAB\

    "A.hpp"

    "C:\Documents\MATLAB\A.lib"

     

    Файл заголовка и файл общего объекта в Linux.

    • A.hpp

    • A.so в папке ~/MATLAB/

    "A.hpp"

    "~/MATLAB/A.so"

     

    Заголовочный файл и динамический файл общей библиотеки на macOS.

    • A.hpp

    • A.dylib в папке $home/Documents/MATLAB

    "A.hpp"

    "$home/Documents/MATLAB/A.dylib"

     

    Полностью определяется заголовочным файлом и .cpp исходный файл. Нет файлов библиотеки.

    • Заголовок файла A.hpp

    • Исходный файл A.cpp

    "A.hpp"

     

    "A.cpp"

    Несколько заголовочных файлов, исходный файл и файл общей библиотеки. Создайте интерфейс с именем A.

    • Файлы заголовков A.hpp и B.hpp

    • Исходный файл A.cpp

    • Общие файлы библиотек B.lib в C:\Documents\MATLAB\

    ["A.hpp","B.hpp"]
    [a]

    "C:\Documents\MATLAB\B.lib"

    "A.cpp"

    Библиотека только для заголовков. Библиотека полностью определена в заголовочном файле и не имеет общего файла библиотеки.

    • A.hpp

    "A.hpp"

      

    Библиотека полностью определена в .CPP и не имеет общего файла библиотеки.

    • A.cpp

    "A.cpp"

      

    [a] Поскольку у вас есть несколько заголовочных файлов, вы должны задать "PackageName" аргумент имя-значение. Для примера используйте имя "A". Затем, когда вы вызываете функцию библиотеки functionname из MATLAB, синтаксис клиб. A. <reservedrangesplaceholder0>.

Введенный в R2019a