每个应用程序必须有一个CmakeLists.txt文件。此文件是构建系统的顶层。最终生成的ephyr.elf二进制文件包含应用程序和内核库。
可以在CmakeLists.txt文件中添加如下配置。

添加板子信息

如果只想为一个板子构建,请在新行上添加应用程序的板子配置名称。例如:

  1. set(BOARD qemu_x86)

寻找板子信息的优先级如下,以下优先级从高到底:

  • Cmake缓存里查找BOARD的名称。
  • 从命令行里查找BOARD的名称。例如:west build-DBOARD=YOUR_BOARD
  • 从设置的环境变量里找BOARD的名称。
  • CmakeLists.txt的变量里寻找BOARD的名称。

    设置Kconfig的配置文件

    如果您的应用程序使用prj.conf以外的文件作为Kconfig的配置文件,则在CmakeLists.txt中添加文件名字到CONF_FILE变量中。如果给出多个文件名,则按空格或分号将其分开。CONF_FILE变量可以接受Cmake的列表变量。

    1. set(CONF_FILE "fragment_file1.conf")
    2. list(APPEND CONF_FILE "fragment_file2.conf")

    关于Kconfig的配置文件的优先级,可以查看Kconfig的初始化配置。

    设置覆盖设备树的配置

    如果您的应用程序使用设备树覆盖文件*.overlay,需要在CmakeLists.txt文件中设置DTC_OVERLAY_FILE变量。

    应用程序设置自定义内核配置选项

  • 在应用程序的顶层目录下创建一个Kconfig文件。

  • Kconfig的里的内容如下:
    1. # SPDX-License-Identifier: Apache-2.0
    2. mainmenu "Your Application Name"
    3. # Your application configuration options go here
    4. # Sources Kconfig.zephyr in the Zephyr root directory.
    5. #
    6. # Note: All 'source' statements work relative to the Zephyr root directory (due
    7. # to the $srctree environment variable being set to $ZEPHYR_BASE). If you want
    8. # to 'source' relative to the current Kconfig file instead, use 'rsource' (or a
    9. # path relative to the Zephyr root).
    10. source "Kconfig.zephyr"

    必须在自己目录下包含Kconfig.zephyr文件,否则无法加载zephyr内核的Kconfig选项。

在应用程序目录下建立Kconfig文件,编译系统可以直接找到Kconfig的起始文件。如果在需要在其他目录下建立Kconfig文件,就需要在CmakeLists.txt中设置变量KCONFIG_ROOT变量,设置为绝对路径。

CmakeLists.txt中查找Zephyr

在CmakeLists.txt中查找Zephyr,并设置项目名称。

  1. find_package(Zephyr)
  2. project(my_zephyr_app)

将应用程序源文件添加到构建系统中

CmakeLists.txt中添加如下。

  1. target_sources(app PRIVATE src/main.c)

将二进制文件合并

CmakeLists.txt中通过zephyr提供的HEX_FILES_TO_MERGE属性,将mcuboot生成的二进制和zephyr应用程序生成的二进制合并为一个二进制文件输出。

  1. set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE
  2. ${app_bootloader_hex}
  3. ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME}
  4. ${app_provision_hex})

基础的CmakeLists.txt文件示例

  1. set(BOARD qemu_x86)
  2. find_package(Zephyr)
  3. project(my_zephyr_app)
  4. target_sources(app PRIVATE src/main.c)

CMakeCache .txt文件

CMake使用CMakeCache.txt文件作为持久键值对字符串存储,用于在运行之间缓存值,包括编译和构建选项以及库依赖关系的路径。当CMake在初始构建时创建此缓存文件。