每个应用程序必须有一个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.0mainmenu "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在初始构建时创建此缓存文件。
