配置文件
XCommon CMake 项目中可以使用四种类型的 CMake 配置文件。
- 应用程序
CMakeLists.txt - 模块
lib_build_info.cmake - 静态库
lib_build_info.cmake - 静态库
CMakeLists.txt
应用程序 CMakeLists.txt
应用程序的 CMakeLists.txt 文件位于如 沙盒结构 部分所述的应用程序目录中。此文件通常包含三个部分。
第一部分是“头定义”,这部分必须存在以提供必需的 CMake 函数调用和加载 XCommon CMake 函数定义。CMake Header 中的三行在文件开头是必需的。
文件的第二部分通常是最大的。它包含了将被 XCommon CMake 函数用来配置应用程序的变量定义。存在一组命名变量,如 变量 部分所述,这些变量定义了构建配置的依赖关系和选项。
有两个必需变量:APP_HW_TARGET 是定义目标设备所必需的,可以是 XCT 工具中定义的命名目标或本地 XN 文件;XMOS_SANDBOX_DIR 必须设置为沙盒根目录的路径(如果应用程序没有依赖关系,这个变量并非绝对必要)。最好的做法是将其设置为相对于 CMake 变量 ${CMAKE_CURRENT_LIST_DIR} 的路径,该变量是包含此应用程序 CMakeLists.txt 文件的目录。
在 APP_DEPENDENT_MODULES 变量中提供的依赖模块列表应仅包含应用程序源代码中直接使用的依赖。任何需要的子依赖将在需要它们的模块中定义。
最后部分是调用 XMOS_REGISTER_APP()。此函数执行必要的操作以填充沙盒依赖,并生成 CMake 构建环境。在调用此函数之前,必须设置所有所需的 XCommon CMake 应用程序变量。
示例:
cmake_minimum_required(VERSION 3.21)
include($ENV{XMOS_CMAKE_PATH}/xcommon.cmake)
project(app_example)
set(XMOS_SANDBOX_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
set(APP_HW_TARGET XCORE-AI-EXPLORER)
set(APP_COMPILER_FLAGS -O3 -Wall)
set(APP_DEPENDENT_MODULES "lib_foo")
XMOS_REGISTER_APP()
模块 lib_build_info.cmake
该模块代码本身不包含 CMakeLists.txt 文件,因为它不是 XCommon CMake 的入口点。相反,模块目录中包含了一个名为 lib_build_info.cmake 的文件,使其可以被其他 XCommon CMake 项目引用。
lib_build_info.cmake 文件首先定义了一系列变量,随后调用了 XMOS_REGISTER_MODULE() 函数。有些变量定义是必须的,请参阅“必需的模块变量”。在调用 XMOS_REGISTER_MODULE() 之前,必须设定所有需要的 XCommon CMake 模块变量。
类似于应用变量,LIB_DEPENDENT_MODULES 变量应只包含模块的直接依赖。任何需要的子依赖都将在那些模块中定义。
示例:
set(LIB_NAME lib_foo)
set(LIB_VERSION 3.2.1)
set(LIB_INCLUDES api)
set(LIB_COMPILER_FLAGS -Os)
set(LIB_DEPENDENT_MODULES "lib_bar")
XMOS_REGISTER_MODULE()
静态库 lib_build_info.cmake
对于静态库,创建 lib_build_info.cmake 文件以存储 XCommon CMake 变量定义,以便将其链接到应用程序中。一些变量定义是必需的;请查看“必需的静态库变量”。在调用 XMOS_REGISTER_STATIC_LIB() 之前,必须设置所有需要的 XCommon CMake 静态库变量。
示例:
set(LIB_NAME lib_bar)
set(LIB_VERSION 1.0.0)
set(LIB_ARCH xs2a xs3a)
set(LIB_INCLUDES api)
set(LIB_C_SRCS libsrc/bar0.c libsrc/bar1.c)
set(LIB_COMPILER_FLAGS -O3)
set(LIB_DEPENDENT_MODULES "")
XMOS_REGISTER_STATIC_LIB()
静态库 CMakeLists.txt
如果静态库的代码库也包含构建它的源代码,则可以创建一个 CMakeLists.txt 文件来配置此构建。它包含与应用程序 CMakeLists.txt 文件相同的前三行,通过 project() 函数设置库名,然后设置 XMOS_SANDBOX_DIR 变量并包含前一节描述的 lib_build_info.cmake。这样可以在构建静态库存档和将现有存档链接到应用程序中的两种工作流程之间共享 XCommon CMake 变量。
示例:
cmake_minimum_required(VERSION 3.21)
include($ENV{XMOS_CMAKE_PATH}/xcommon.cmake)
project(lib_bar)
set(XMOS_SANDBOX_DIR ${CMAKE_CURRENT_LIST_DIR}/../..)
include(lib_build_info.cmake)