exponenta event banner

clibgen.generateLibraryDefinition

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

Описание

пример

clibgen.generateLibraryDefinition(InterfaceGenerationFiles,'Libraries',LibraryFiles) создает файл определения кода MATLAB ® Live Code, используемый для создания интерфейса 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 и файлы SharingSourceFiles:

  • Заголовочные файлы, с расширениями файлов .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, имя включает полный или относительный путь к файлу. Поддерживающий исходный файл должен содержать код C++.

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

Если библиотека полностью определена заголовком и .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 является trueзатем MATLAB отображает сообщения генерации в окне команд при создании файла определения. Этот оператор создает 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 с нулевым окончанием путем указания 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 команда. Если false, то MATLAB игнорирует комментарии 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, в именах папок и файлов, поскольку некоторые параметры языковых стандартов могут не поддерживать эти символы. Сведения о языковых стандартах см. в разделе Принципы настройки языковых стандартов для интернационализации.

Совет

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

Представлен в R2019a