主要内容

本页采用了机器翻译。点击此处可查看英文原文。

设置 C++开发环境

R2026b

要建立一个集成 MATLAB® 函数的 C++ 开发环境,用户需要一些工具。首先,需要 MATLAB 来编写函数。接下来,需要 MATLAB Compiler SDK™ 来从这些 MATLAB 函数创建可部署函数。为了将这些可部署函数与 C++ 应用程序集成,用户需要一个 C++ 开发环境。选项包括使用 MATLAB 本身进行跨平台 C++ 开发、在 Windows® 上使用 Microsoft® Visual Studio® 或使用 Visual Studio Code 和 CMake 进行跨多平台开发。

前提条件

  • 编写您想要部署的 MATLAB 函数。

  • 使用 compiler.build.cppSharedLibrary 函数或 C++ 共享库编译器创建可部署的 C++ 共享库,其中包含 MATLAB 函数。

设置 MATLAB Desktop 进行 C++ 开发(Windows、Linux 和 macOS)

  1. 在 MATLAB 命令提示符下,通过执行以下命令配置用于 C++ 应用程序的 C++ 编译器:

    mbuild -setup
    除了配置 C++ 编译器之外,mbuild 实用工具还可以编译和链接集成 MATLAB Compiler SDK 生成的 C++ 共享库的应用程序。它的选项文件指定用来编译应用程序的编译器和链接器设置。

  2. 使用 MATLAB 编辑器编写 C++ 应用程序代码。使用 compiler.build.cppSharedLibrary 函数或 C++ 共享库编译器从 MATLAB 函数创建可部署的 C++ 共享库。

  3. 使用 mbuild 函数根据 MATLAB Compiler SDK C++ 共享库编译和链接您的 C++ 应用程序代码。

    mbuild <cppApplicationSourceCode>.cpp -v                                        (MATLAB Data API)
    mbuild <cppApplicationSourceCode>.cpp <compilerSDKGeneratedLibrary>.lib -v      (mwArray API)

设置 Microsoft Visual Studio 进行 C++ 开发(仅限 Windows)

  1. 在 Visual Studio 中创建一个新的 C++工程。如果正在创建 C++ 控制台应用程序,请选择 Console App。否则,请选择适当的工程类型。

  2. 通过右键点击 Solution Explorer 中的工程节点并选择 Properties 来访问工程属性。

  3. 验证工程属性页中的 Platform 是否设置为 x64。

  4. 从 Project Property 页的左侧窗格中,配置工程属性。

    配置步骤如果您使用 MATLAB Data Array如果您使用 mwArray
    附加包含目录

    在 C/C++ > General下,将以下目录添加到 Additional Include Directories 字段:

    如果使用 MATLAB 设置:

    C:\Program Files\MATLAB\R2026b\extern\include

    如果使用 MATLAB Runtime 设置:

    C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\include

    在 C/C++ > General下,将以下目录添加到 Additional Include Directories 字段:

    如果使用 MATLAB 设置:

    C:\Program Files\MATLAB\R2026b\extern\include

    如果使用 MATLAB Runtime 设置:

    C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\include
    另外,添加包含生成的头文件 <compilerSDKGeneratedLibrary>.h 的目录。

    附加库目录

    在 Linker > General 下,将以下目录添加到 Additional Library Directories 字段:

    如果使用 MATLAB 设置:

    C:\Program Files\MATLAB\R2026b\extern\lib\win64\microsoft

    如果使用 MATLAB Runtime 设置:

    C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\lib\win64\microsoft

    在 Linker > General 下,将以下目录添加到 Additional Library Directories 字段:

    如果使用 MATLAB 设置:

    C:\Program Files\MATLAB\R2026b\extern\lib\win64\microsoft

    如果使用 MATLAB Runtime 设置:

    C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\lib\win64\microsoft
    另外,添加包含生成的头文件 <compilerSDKGeneratedLibrary>.h 的目录。

    附加依赖项

    在 Linker > Input 下,将以下库添加到 Additional Dependencies 字段。

    delayimp.lib
    libMatlabCppSharedLib.lib
    libMatlabDataArray.lib

    在 Linker > Input 下,将以下库添加到 Additional Dependencies 字段。

    <compilerSDKGeneratedLibrary>.lib
    mclmcrrt.lib

    延迟加载的 DLL

    在 Linker > Input 下,将以下库添加到 Delay Loaded Dlls 字段:

    libMatlabDataArray.dll

    不适用。

  5. 将头文件包含在您的 C++ 应用程序代码中。

    • 如果您使用 MATLAB Data API,请添加:

      #include "MatlabCppSharedLib.hpp"
    • 如果您使用 mwArray API,请添加:

      #include "<compilerSDKGeneratedLibrary>.h"

在 Visual Studio 中将设置导出为模板(可选)

一旦您为工程设置了所有必要的配置和依赖项,您就可以将其导出为模板以供将来重复使用。执行此操作的步骤如下:

  1. 在 Visual Studio 中打开工程后,从主菜单转到 Project > Export Template..将打开 Export Template Wizard。

  2. 选择 Project Template 作为要创建的模板类型,然后点击 Next。

  3. 选择当前工程导出为模板,然后点击 Next。

  4. 提供模板名称、描述、图标和预览图像。您还可以选择模板输出位置并决定是否自动将模板导入 Visual Studio。填写这些详细信息后,点击 Finish。

Visual Studio 创建一个 .zip 文件,作为您的工程模板。如果您选择自动导入模板,则可以在 Visual C++ > My Templates 下的 New Project 对话框中使用此模板。

请注意,模板将包含所有工程文件和配置,但不包括外部依赖项。

在 Visual Studio 中设置环境变量

设置 CPPSHARED_BASE_CTF_PATH 环境变量

确保仅在生成 MATLAB 代码存档(.ctf 文件)后才遵循此过程。运行使用 MATLAB 代码存档的 C++ 应用程序时,应用程序需要识别存档的位置。您可以通过设置 CPPSHARED_BASE_CTF_PATH 环境变量来让该位置为人所知,并将其指向包含 .ctf 文件的目录。

在 Visual Studio 中,按照以下步骤操作:

  • 在 Solution Explorer 中右键单击工程并选择 Properties,打开 Property Pages 对话框。

  • 在左侧栏的 Configuration Properties 下选择 Debugging。

  • 在右侧栏中找到 Environment 字段并输入:

    CPPSHARED_BASE_CTF_PATH=<path to directory containing .ctf file>

  • 点击应用,然后单击确定关闭对话框。

    这些步骤可确保每次在 Visual Studio 中运行或调试应用程序时设置环境变量。

设置 PATH 环境变量

为了确保您的应用程序能够找到必要的 MATLAB 或 MATLAB Runtime 库,您需要在 Visual Studio 中设置 PATH 环境变量。如果您想在 Visual Studio 中运行应用程序进行调试,这一点至关重要。

在 Visual Studio 中,按照以下步骤操作:

  1. 在 Solution Explorer 中右键单击工程并选择 Properties,打开 Property Pages 对话框。

  2. 在左侧栏的 Configuration Properties 下选择 Debugging。

  3. 在右侧栏中找到 Environment 字段并输入:

    对于 MATLAB:

    PATH=C:\Program Files\MATLAB\R2026b\runtime\win64;%PATH%

    对于 MATLAB Runtime:

    PATH=C:\Program Files\MATLAB\MATLAB Runtime\R2026b\runtime\win64;%PATH%

  4. 点击应用,然后单击确定关闭对话框。

    这些步骤可确保每次在 Visual Studio 中运行或调试应用程序时设置环境变量。

设置 Visual Studio Code 和 CMake 以进行 C++ 开发(Windows、Linux 和 macOS)

前提条件

配置 Visual Studio Code

  1. 打开您的终端或命令提示符。

  2. 导航到您想要创建工程的位置并创建一个新目录。

    mkdir MyCppMatlabProject
    cd MyCppMatlabProject
  3. 在打开当前目录的情况下启动 Visual Studio Code。

    code .

    如果您收到错误提示 code 无法识别,您可能需要将 Visual Studio Code 添加到系统 PATH 或使用 code 可执行文件的完整路径。

  4. 您可以直接从终端或在 Visual Studio Code 内部创建新的源文件。

  5. 通过编辑 c_cpp_properties.json 文件配置 IntelliSense 引擎以选择 MATLAB 特定的库。

    要在 includePath 文件中设置 c_cpp_properties.json 设置,请将路径添加到 includePath 数组。格式如下:

    "includePath": [
        "${workspaceFolder}/**",
        "C:\\Program Files\\MATLAB\\R2026b\\extern\\include",
        "path\\to\\v2\\generic_interface\\header\\file\\directory"
    ]
    
    将 "path\\to\\v2\\generic_interface\\header\\file\\directory" 替换为头文件的实际目录路径。这确保编译器可以定位必要的头文件。

    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceFolder}/**",
                    "C:\\Program Files\\MATLAB\\R2026b\\extern\\include",
                    "path\\to\\v2\\generic_interface\\header\\file\\directory"
                ],
                "defines": [
                    "_DEBUG",
                    "UNICODE",
                    "_UNICODE"
                ],
                "windowsSdkVersion": "10.0.22621.0",
                "compilerPath": "cl.exe",
                "intelliSenseMode": "windows-msvc-x64"
            }
        ],
        "version": 4
    }
  6. 通过编辑 launch.json 文件来配置调试器设置并指定存档文件(.ctf 文件)的路径。

    要在 CPPSHARED_BASE_CTF_PATH 文件中设置 launch.json 环境变量,请向 environment 数组中添加一个条目,指定存档(.ctf 文件)目录的路径。格式如下:

     "environment": [
                    {
                        "name": "CPPSHARED_BASE_CTF_PATH",
                        "value": "path\\to\\v2\\generic_interface\\ctf\\file\\directory"
                    }
                ]
    将 "path\\to\\v2\\generic_interface\\ctf\\file\\directory" 替换为实际目录路径。

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Windows Debug - MATLAB Compiler SDK C++",
                "type": "cppvsdbg",
                "request": "launch",
                "program": "${workspaceFolder}/build/Debug/MyCppMatlabProject.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [
                    {
                        "name": "CPPSHARED_BASE_CTF_PATH",
                        "value": "path\\to\\v2\\generic_interface\\ctf\\file\\directory"
                    }
                ],
                "console": "integratedTerminal",
                "externalConsole": true
            }
        ]
    }

配置 CMake

在工程目录中创建一个 CMakeLists.txt 文件,其内容如下:

cmake_minimum_required(VERSION 3.27)
project(MyCppMatlabProject)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# Source files and executable name
add_executable(MyCppMatlabProject ConsoleApp.cpp)

# Platform-specific settings
if(WIN32)
    # Windows-specific settings
    include_directories(
        "C:/Program Files/MATLAB/R2026b/extern/include"
        "path/to/v2/generic_interface"
    )
    
    if(MSVC)
        message("Configuring for MSVC")
        set(CMAKE_GENERATOR_PLATFORM x64)
        
        link_directories("C:/Program Files/MATLAB/R2026b/extern/lib/win64/microsoft")

        target_link_libraries(MyCppMatlabProject
            "C:/Program Files/MATLAB/R2026b/extern/lib/win64/microsoft/libMatlabCppSharedLib.lib"
            "C:/Program Files/MATLAB/R2026b/extern/lib/win64/microsoft/libMatlabDataArray.lib"
            "delayimp.lib"
        )

        set_target_properties(MyCppMatlabProject PROPERTIES
            LINK_FLAGS "/DELAYLOAD:libMatlabDataArray.dll"
        )

    elseif(CMAKE_COMPILER_IS_GNUCXX)
        message("Configuring for MinGW")
        link_directories("C:/Program Files/MATLAB/R2025b/extern/lib/win64/mingw64")

        target_link_libraries(MyCppMatlabProject
            "C:/Program Files/MATLAB/R2026b/extern/lib/win64/mingw64/libMatlabCppSharedLib.lib"
            "C:/Program Files/MATLAB/R2026b/extern/lib/win64/mingw64/libMatlabDataArray.lib"
        )
    endif()

elseif(APPLE)
    if( (CMAKE_OSX_ARCHITECTURES AND CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
        OR (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64") )

        # -------- Apple Silicon (maca64) --------
        include_directories(
            "/Applications/MATLAB_R2026b.app/extern/include"
            "/Users/username/MATLAB/work/example/output/v2/generic_interface"
        )

        link_directories(
			"/Applications/MATLAB_R2026b.app/runtime/maca64"
			"/Applications/MATLAB_R2026b.app/extern/bin/maca64"
		)

        target_link_libraries(MyCppMatlabProject
            "/Applications/MATLAB_R2026b.app/runtime/maca64/libMatlabCppSharedLib.dylib"
            "/Applications/MATLAB_R2026b.app/extern/bin/maca64/libMatlabDataArray.dylib"
        )

    else()
        # -------- Intel (maci64) --------
        include_directories(
            "/Applications/MATLAB_R2026b.app/extern/include"
            "/Users/username/MATLAB/work/example/output/v2/generic_interface"
        )

        link_directories(
		    "/Applications/MATLAB_R2026b.app/runtime/maci64"
		    "/Applications/MATLAB_R2026b.app/extern/bin/maci64"
		)

        target_link_libraries(MyCppMatlabProject
            "/Applications/MATLAB_R2026b.app/runtime/maci64/libMatlabCppSharedLib.dylib"
            "/Applications/MATLAB_R2026b.app/extern/bin/maci64/libMatlabDataArray.dylib"
        )
    endif()
endif()


elseif(UNIX)
    # Linux-specific settings
    include_directories(
        "/usr/local/MATLAB/R2026b/extern/include"
        "/path/to/v2/generic_interface"
    )

    link_directories(
		"/usr/local/MATLAB/R2026b/runtime/glnxa64"
		"/usr/local/MATLAB/R2026b/extern/bin/glnxa64"
	)

    target_link_libraries(MyCppMatlabProject
        "/usr/local/MATLAB/R2026b/runtime/glnxa64/libMatlabCppSharedLib.so"
        "/usr/local/MATLAB/R2026b/extern/bin/glnxa64/libMatlabDataArray.so"
    )
endif()

编译

  1. 按 Ctrl+Shift+P(或 macOS 上的 Cmd+Shift+P)打开 Command Palette。

  2. 类型 CMake:建造并从列表中选择它。

其他开发环境

为了使用其他 C++ 开发环境,您需要知道在编译期间要包含哪些附加文件和库。建议您首先使用 MATLAB 中的 mbuild 函数以详尽模式编译您的 C++ 应用程序。这将显示您需要在其他开发环境中包含的所有文件。

相关文件的位置

Windows

MATLAB

  • C:\Program Files\MATLAB\R2026b\extern\include

  • C:\Program Files\MATLAB\R2026b\extern\lib\win64\<compiler>

MATLAB Runtime

  • C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\include

  • C:\Program Files\MATLAB\MATLAB Runtime\R2026b\extern\lib\win64\<compiler>

Linux

MATLAB

  • /usr/local/MATLAB/R2026b/extern/include

MATLAB Runtime

  • /usr/local/MATLAB/MATLAB_Runtime/R2026b/extern/include

macOS

MATLAB

  • /Applications/MATLAB_R2026b.app/extern/include

MATLAB Runtime

  • /Applications/MATLAB/MATLAB_Runtime/R2026b/extern/include

测试环境

您可以根据用于生成 C++ 工件的已安装 MATLAB 版本或 MATLAB Runtime 测试您的 C++ 应用程序。但是,在部署期间,您必须使用 MATLAB Runtime。

另请参阅

主题