每个应用程序必须有一个CmakeLists.txt
文件。此文件是构建系统的顶层。最终生成的ephyr.elf
二进制文件包含应用程序和内核库。
可以在CmakeLists.txt
文件中添加如下配置。
添加板子信息
如果只想为一个板子构建,请在新行上添加应用程序的板子配置名称。例如:
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
的列表变量。set(CONF_FILE "fragment_file1.conf")
list(APPEND CONF_FILE "fragment_file2.conf")
关于Kconfig的配置文件的优先级,可以查看Kconfig的初始化配置。
设置覆盖设备树的配置
如果您的应用程序使用设备树覆盖文件
*.overlay
,需要在CmakeLists.txt
文件中设置DTC_OVERLAY_FILE
变量。应用程序设置自定义内核配置选项
在应用程序的顶层目录下创建一个
Kconfig
文件。Kconfig
的里的内容如下:# SPDX-License-Identifier: Apache-2.0
mainmenu "Your Application Name"
# Your application configuration options go here
# Sources Kconfig.zephyr in the Zephyr root directory.
#
# Note: All 'source' statements work relative to the Zephyr root directory (due
# to the $srctree environment variable being set to $ZEPHYR_BASE). If you want
# to 'source' relative to the current Kconfig file instead, use 'rsource' (or a
# path relative to the Zephyr root).
source "Kconfig.zephyr"
必须在自己目录下包含
Kconfig.zephyr
文件,否则无法加载zephyr
内核的Kconfig选项。
在应用程序目录下建立Kconfig
文件,编译系统可以直接找到Kconfig
的起始文件。如果在需要在其他目录下建立Kconfig
文件,就需要在CmakeLists.txt
中设置变量KCONFIG_ROOT
变量,设置为绝对路径。
在CmakeLists.txt
中查找Zephyr
在CmakeLists.txt中查找Zephyr,并设置项目名称。
find_package(Zephyr)
project(my_zephyr_app)
将应用程序源文件添加到构建系统中
在CmakeLists.txt
中添加如下。
target_sources(app PRIVATE src/main.c)
将二进制文件合并
在CmakeLists.txt
中通过zephyr
提供的HEX_FILES_TO_MERGE
属性,将mcuboot生成的二进制和zephyr应用程序生成的二进制合并为一个二进制文件输出。
set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE
${app_bootloader_hex}
${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME}
${app_provision_hex})
基础的CmakeLists.txt
文件示例
set(BOARD qemu_x86)
find_package(Zephyr)
project(my_zephyr_app)
target_sources(app PRIVATE src/main.c)
CMakeCache .txt
文件
CMake使用CMakeCache.txt
文件作为持久键值对字符串存储,用于在运行之间缓存值,包括编译和构建选项以及库依赖关系的路径。当CMake在初始构建时创建此缓存文件。