clibgen.generateLibraryDefinition

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

Описание

пример

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

Имя файла определения является definelibName.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® Visual Studio®, затем можно задать .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"], "Библиотеки", "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 true, затем MATLAB отображает сообщения генерации к командному окну при создании файла определения. Этот оператор создает defineh1.mlx и отображения обмениваются сообщениями к командному окну.

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

Для получения дополнительной информации см. сообщения О Неподдерживаемых Типах.

Типы данных: логический

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

Типы данных: логический

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

  • const char *

  • const wchar_t *

  • const char16_t *

  • const char32_t *

Типы данных: логический

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

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

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

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

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

Для получения дополнительной информации смотрите, Публикуют текст Справки для Интерфейса MATLAB к Библиотеке C++.

Типы данных: логический

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

Типы данных: логический

Ограничения

Советы

  • Чтобы воссоздать файл определения библиотеки, сначала удалите definelibName.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 синтаксис является clib. functionname.

Введенный в R2019a