配置 CMake 编译过程
CMake 是用于编译过程管理的第三方开源工具。为了编译从 MATLAB® 代码生成的代码,软件为以下各项提供 CMake 工具链定义:
Windows® 上的 Microsoft® Visual C++® 和 MinGW®,Linux® 上的 GCC,以及 Mac 计算机上的 Xcode(使用 Ninja 和联编文件生成器)。
Microsoft Visual Studio® 和 Xcode 工程编译。
如果开发计算机上安装了受支持的工具链,您可以在代码生成期间指定对应的 CMake 工具链定义。当您生成代码时,CMake 将执行以下操作:
使用配置文件 (
CMakeLists.txt) 生成标准编译文件。运行编译器和其他编译工具来创建可执行代码。
您还可以:
使用
target包提供自定义 CMake 工具链定义。有关详细信息,请参阅Create Custom CMake Toolchain Definition。为算法导出仅生成代码和配置文件。
指定 CMake 工具链定义
使用 MATLAB Coder
要打开“代码生成配置”对话框,请在工具条的 MATLAB Coder™ 选项卡中点击设置。在硬件窗格中:
指定您的硬件板,以及可选的硬件实现参数。此信息确定可用的工具链定义的选择。默认值 MATLAB 主机适用于部署到运行 MATLAB 的计算机。有关详细信息,请参阅可用的 CMake 工具链定义。
指定以下编译过程参数:
工具链 - 从下拉列表中选择 CMake 工具链定义。
编译配置 - 选择以下值之一:
版本 - 启用优化。
调试 - 禁用优化,生成调试符号。
RelWithDebInfo - 启用优化,生成调试符号。
MinSizeRel - 针对大小进行优化,不生成调试符号。
指定 - 允许您通过 CMake Configure 和 CMake Build 字段指定工具链详细信息。
工具链详细信息 - 如果编译配置为指定,请填写以下字段:
CMake Configure - 为下游工具生成工程编译系统编译器工件时要传递给 CMake 的附加命令行参量。
CMake Build - 在编译模式下使用 CMake 时要传递给它的附加命令行参量。
在命令行中
在 coder.CodeConfig 或 coder.EmbeddedCodeConfig 对象中:
如有必要,请将
coder.hardware对象赋给Hardware属性或通过赋给一个coder.HardwareImplementation对象修改HardwareImplementation属性,来配置目标硬件。此信息确定可用的工具链定义的选择。有关详细信息,请参阅可用的 CMake 工具链定义。通过分配
Toolchain和BuildConfiguration属性来指定编译过程。如果将BuildConfiguration设置为'Specify',请使用CustomToolchainOptions属性来自定义选定工具链中工具的设置。有关可用的BuildConfiguration选项的详细信息,请参阅上一节。
有关详细信息,请参阅 https://cmake.org/cmake/help/latest/manual/cmake.1.html。
可用的 CMake 工具链定义
| 平台 | 附带的工具链定义 | 使定义可用的设备供应商和类型 |
|---|---|---|
| Windows | Microsoft Visual C++ 2017 v15.0 | CMake/nmake(64 位 Windows) | Intel-x86-64 (Windows64) AMD-x86-64 (Windows64) |
| Microsoft Visual C++ 2017 v15.0 | CMake/Ninja(64 位 Windows) | ||
| Microsoft Visual Studio Project 2017 | CMake(64 位 Windows) | ||
| Microsoft Visual Studio Project 2019 | CMake(64 位 Windows) | ||
| Microsoft Visual Studio Project 2022 | CMake(64 位 Windows) | ||
| Microsoft Visual C++ 2019 v16.0 | CMake/Ninja(64 位 Windows) | ||
| Microsoft Visual C++ 2022 v17.0 | CMake/nmake(64 位 Windows) | ||
| Microsoft Visual C++ 2022 v17.0 | CMake/Ninja(64 位 Windows) | ||
| MinGW64 | CMake/gmake(64 位 Windows) | ||
| MinGW64 | CMake/Ninja(64 位 Windows) | ||
| Microsoft Visual C++ 2017 v15.0 | CMake/nmake(32 位 Windows) | Intel-x86-32 (Windows32) AMD-x86-32 (Windows32) | |
| Microsoft Visual C++ 2017 v15.0 | CMake/Ninja(32 位 Windows) | ||
| Microsoft Visual Studio Project 2017 | CMake(32 位 Windows) | ||
| Microsoft Visual Studio Project 2019 | CMake(32 位 Windows) | ||
| Microsoft Visual Studio Project 2022 | CMake(32 位 Windows) | ||
| Microsoft Visual C++ 2019 v16.0 | CMake/nmake(32 位 Windows) | ||
| Microsoft Visual C++ 2019 v16.0 | CMake/Ninja(32 位 Windows) | ||
| Microsoft Visual C++ 2022 v17.0 | CMake/nmake(32 位 Windows) | ||
| Microsoft Visual C++ 2022 v17.0 | CMake/Ninja(32 位 Windows) | ||
| Linux | GNU gcc/g++ | CMake/gmake(64 位 Linux) | Intel-x86-64 (Linux 64) AMD-x86-64 (Linux 64) |
| GNU gcc/g++ | CMake/Ninja(64 位 Linux) | ||
| Mac | Xcode with Clang | CMake/gmake(64 位 Mac) | Intel-x86-64 (Mac OS X) AMD-x86-64 (Mac OS X) |
| Xcode with Clang | CMake/Ninja(64 位 Mac) | ||
| Xcode with Clang Project | CMake(64 位 Mac) |
注意
如果未选中测试硬件与生产硬件相同复选框,设备供应商和类型的测试硬件设置将控制附带的工具链定义的可用性。
为算法导出仅生成代码和 CMake 配置文件
当您为 MATLAB 代码仅生成 C/C++ 源代码时,您可以指示代码生成器同时生成不依赖特定编译工具的 CMakeLists.txt 文件。执行以下操作之一:
在
coder.CodeConfig或coder.EmbeddedCodeConfig对象中,将Toolchain属性设置为"CMake"。通过点击工具条的 MATLAB Coder 选项卡中的设置打开“代码配置设置”对话框。在硬件窗格中,将工具链设置为 CMake。
要将生成的代码导出到另一个开发环境,请使用以下工作流:
将生成的代码打包,以生成包含源代码和 CMake 配置文件的 ZIP 文件。使用分层打包类型。请参阅
packNGo和Package Code for Other Development Environments。将 ZIP 文件转移到您的开发环境中。
解压缩打包的文件。
使用 CMake 编译工具和配置文件创建一个可执行文件。
如果 ZIP 文件包含 mlrFiles.zip,即 matlabroot 文件夹树中的静态依赖项,则必须为 CMake 编译工具指定解压缩文件的位置。在您的开发环境中,通过运行以下命令设置 MATLAB_ROOT CMake 缓存条目:
cmake -S pathToSource -B pathToProposedLocationOfDerivedFiles -DMATLAB_ROOT=pathToUnzippedmlrFiles
配置位置无关代码的使用
默认情况下,代码生成器生成编译位置无关代码的 CMake 配置 (CMakeLists.txt) 文件。
如果您仅生成代码并使用 CMake 配置文件进行算法导出,则您可以通过在运行 cmake 时设置 CMAKE_POSITION_INDEPENDENT_CODE 变量来覆盖默认行为:
cmake -S pathToSource -B pathToProposedLocationOfDerivedFiles
-DMATLAB_ROOT=pathToUnzippedmlrFiles -DCMAKE_POSITION_INDEPENDENT_CODE=OFF如果您定义自定义工具链,则可以使用 target.CMakeBuilder (Simulink Coder) 类的 CommandLineCacheEntries 属性设置该变量:
toolchain = target.create('Toolchain','Name','My Toolchain','MakeToolType','CMake'); toolchain.Builder.CommandLineCacheEntries(end+1) = ... target.create('CMakeCacheEntry','Name','CMAKE_POSITION_INDEPENDENT_CODE','Value','OFF');
如果您使用预定义的工具链,则可以在 before_make 编译钩子或 PostCodeGenerationCommand 钩子中使用以下代码:
cfg = coder.make.CMakeListsConfiguration(buildInfo);
cfg.PositionIndependentCode = 'Off';另请参阅
packNGo | codegen | coder.CodeConfig | coder.EmbeddedCodeConfig | coder.hardware | coder.HardwareImplementation