我先定位顶层 CMake 里选择 aima/demo 的那段逻辑(含行号),然后把它和 build_yaxon.bat 传参、Makefile 调用 cmake 的环境变量传递关系串起来解释清楚。
Read multiple configuration files
把 aima 或 demo 编进最终固件(准确说是编进 userspace 的 customer_app.elf)的入口在顶层 CMake:看 CMakeLists.txt:153-164。
1) 触发条件:必须启用 PROJECT_YAXON
只有 if(PROJECT_YAXON) 成立时,才会走“编译雅迅APP”这段逻辑(并最终链接进可执行文件):CMakeLists.txt:152-164
这个 PROJECT_YAXON 一般来自 .config(Kconfig)转成的 CMake 选项(Makefile 调 cmake 时会把 .config 里的开关转成一堆 -Dxxx=ON/OFF 传进去)。
2) 选择 aima 还是 demo:靠环境变量 build_option
在 CMakeLists.txt:154-159:
如果环境变量 build_option 非空:
add_subdirectory(./application/$ENV{build_option} YXAPP)
也就是你设置 build_option=demo 时,会进入 demo,读取它的 CMakeLists.txt,生成一个静态库目标 YXAPP(例如 CMakeLists.txt 里 add_library(YXAPP STATIC ...))。
如果环境变量 build_option 为空:
默认 add_subdirectory(./application/aima YXAPP)
对应 CMakeLists.txt 里同样定义 YXAPP 静态库。
3) “编进固件”具体是怎么完成的:链接 YXAPP 到 userspace 可执行文件
紧接着它做了链接:
target_link_libraries(${SC_USERSPACE_NAME} PRI