使用 CMake 构建 FreeRTOS - FreeRTOS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 CMake 构建 FreeRTOS

默认情况下,CMake 将主机操作系统作为目标系统。要使用 CMake 进行交叉编译,您必须提供一个工具链文件以指定要使用的编译器。FreeRTOS 在 /tools/cmake/toolchains 中提供了一些默认工具链文件。工具链文件的使用说明因您是使用 CMake 命令行界面还是 GUI 而异。生成构建文件(CMake 命令行工具)提供了更多详细信息。要了解有关 CMake 中的交叉编译的更多信息,请访问正式 CMake Wiki 中的交叉编译

构建基于 CMake 的项目

  1. 运行 CMake 为本机构建系统生成构建文件,如 Make 或 Ninja。

    可以使用 CMake 命令行工具CMake GUI 为本机构建系统生成构建文件。

    有关生成 FreeRTOS 构建文件的信息,请参阅生成构建文件(CMake 命令行工具)生成构建文件 (CMake GUI)

  2. 调用本机构建系统,将项目制作为可执行文件。

    有关如何制作 FreeRTOS 构建文件的信息,请参阅从生成的构建文件构建 FreeRTOS

生成构建文件(CMake 命令行工具)

可以使用 CMake 命令行工具 (cmake) 以从命令行为 FreeRTOS 生成构建文件。

要生成构建文件,您必须指定目标主板、编译器以及源代码和构建目录的位置。使用 -DVENDOR 选项指定目标主板。使用 -DCOMPILER 选项指定编译器。使用 -S 开关指定源代码的位置,并使用 -B 开关指定生成的构建文件的位置。

注意

编译器必须包含在系统的 PATH 变量中,否则您必须指定编译器的位置。

例如,如果供应商是 Texas Instruments,主板是 CC3220 Launchpad,编译器是 GCC for ARM,则您可以发出以下命令,从当前目录中的源文件构建到名为 build 的目录:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build
注意

如果使用的是 Windows,则必须指定本机构建系统,因为 CMake 默认使用 Visual Studio。例如:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build -G Ninja

或者:

cmake -DVENDOR=ti -DBOARD=cc3220_launchpad -DCOMPILER=arm-ti -S . -B build -G "MinGW Makefiles"

正则表达式 ${VENDOR}.*${BOARD}.* 用于搜索匹配的主板,因此对于 VENDORBOARD 选项,不必使用完整的供应商和主板名称。在只有单个名称匹配的情况下,部分名称也是可行的。例如,以下命令可从同一源文件生成相同的构建文件:

cmake -DVENDOR=ti -DCOMPILER=arm-ti -S . -B build
cmake -DBOARD=cc3220 -DCOMPILER=arm-ti -S . -B build
cmake -DVENDOR=t -DBOARD=cc -DCOMPILER=arm-ti -S . -B build

如果要使用不在默认目录 cmake/toolchains 中的工具链文件,则可使用 CMAKE_TOOLCHAIN_FILE 选项。例如:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -S . -B build

如果工具链文件未使用编译器的绝对路径,并且编译器未添加到 PATH 环境变量中,那么 CMake 可能无法找到编译器。要确保 CMake 找到工具链文件,可以使用 AFR_TOOLCHAIN_PATH 选项。此选项将搜索指定的工具链目录路径以及 bin 下的工具链子文件夹。例如:

cmake -DBOARD=cc3220 -DCMAKE_TOOLCHAIN_FILE='/path/to/toolchain_file.cmake' -DAFR_TOOLCHAIN_PATH='/path/to/toolchain/' -S . -B build

要启用调试,可将 CMAKE_BUILD_TYPE 设置为 debug。启用此选项后,CMake 将调试标志添加到编译选项,并构建带调试符号的 FreeRTOS。

# Build with debug symbols cmake -DBOARD=cc3220 -DCOMPILER=arm-ti -DCMAKE_BUILD_TYPE=debug -S . -B build

也可以将 CMAKE_BUILD_TYPE 设置为 release,将优化标志添加到编译选项。

生成构建文件 (CMake GUI)

可以使用 CMake GUI 生成 FreeRTOS 构建文件。

使用 CMake GUI 生成构建文件

  1. 从命令行中发出 cmake-gui 以启动 GUI。

  2. 选择 Browse Source (浏览源) 并指定源输入,然后选择 Browse Build (浏览构建) 并指定构建输出。

  3. 选择 Configure (配置),然后在 Specify the build generator for this project (指定此项目的构建生成器) 下,查找并选择构建系统,以用于构建所生成的构建文件。

    注意

    如果未显示弹出窗口,则您可能正在重用现有的构建目录。在这种情况下,首先通过单击菜单中的 File -> Delete Cache (文件 -> 删除缓存) 来删除 CMake 缓存。

  4. 选择 Specify toolchain file for cross-compiling (指定用于交叉编译的工具链文件),然后选择 Next (下一步)

  5. 选择工具链文件(例如,/tools/cmake/toolchains/arm-ti.cmake),然后选择 Finish (完成)

    FreeRTOS 的默认配置为模板主板,该主板不提供任何可移植层目标。此时将显示一个窗口,其中显示消息 Error in configuration process (配置过程出错)

    注意

    如果您看到以下错误消息:

    CMake Error at tools/cmake/toolchains/find_compiler.cmake:23 (message): Compiler not found, you can specify search path with "AFR_TOOLCHAIN_PATH".

    这意味着编译器不在您的环境变量 PATH 中。您可以在 GUI 中设置 AFR_TOOLCHAIN_PATH 变量,向 CMake 提供编译器的安装位置。如果您未看到 AFR_TOOLCHAIN_PATH 变量,请单击弹出窗口中的 Add Entry (添加条目) 按钮,输入 AFR_TOOLCHAIN_PATH 作为 name (名称),选择 PATH 作为 type (类型),并在 value (值) 中输入编译器路径,例如“C:/toolchains/arm-none-eabi-gcc”。

  6. GUI 现在应如下所示:

    选择 AFR_BOARD,选择主板,然后选择 Configure (配置)

  7. 选择 Generate (生成)。CMake 生成构建系统文件(例如,makefile 或 ninja 文件),这些文件位于第一步指定的构建目录中。按照下一节中的说明生成二进制映像。

从生成的构建文件构建 FreeRTOS

可以使用本机构建系统构建 FreeRTOS,方法是从输出二进制目录调用构建系统命令。例如,如果构建文件输出目录为 build,并且使用 Make 作为本机构建系统,则可运行以下命令:

cd build make -j4

也可以使用 CMake 命令行工具构建 FreeRTOS。CMake 提供了抽象层用于调用本机构建系统。例如:

cmake --build build_dir

以下是 CMake 命令行工具构建模式的其他一些常见用例:

# Take advantage of CPU cores. cmake --build build_dir --parallel 8
# Build specific targets. cmake --build build_dir --target afr_kernel
# Clean first, then build. cmake --build build_dir --clean-first

有关 CMake 构建模式的更多信息,请参阅 CMake 文档