Ubuntu编译esp-box factory_demo报define_property command is not scriptable错误
报错根因
这个错误是系统安装的CMake版本与当前使用的ESP-IDF版本不兼容导致的:
- 报错环境使用的是CMake 3.22版本,而esp-box仓库的
factory_demo示例默认适配ESP-IDF v4.4.x稳定分支,该分支官方兼容的CMake版本范围为3.16~3.21。CMake 3.22版本调整了define_property命令的执行权限校验,将其标记为不可在脚本模式下调用的命令,旧版ESP-IDF的构建逻辑会在脚本执行阶段触发ExternalProject模块的对应代码段,直接抛出该错误。 - 你贴出的项目
CMakeLists.txt文件本身没有语法或配置错误,无需修改,不要在项目配置文件上做无意义的试错。
可行解决方案
方案1:使用ESP-IDF适配版本的CMake(最稳定,推荐)
不需要手动调整系统CMake版本,直接用ESP-IDF官方脚本自动安装匹配的依赖即可,操作步骤:
- 进入本地ESP-IDF代码根目录,执行官方安装脚本,脚本会自动下载安装当前分支ESP-IDF兼容的CMake、Python依赖等所有组件,不会和系统全局安装的版本产生冲突:
./install.sh
- 重新加载ESP-IDF环境变量:
. ./export.sh
- 回到
factory_demo项目目录,清理之前的构建缓存后重新编译烧录:
idf.py fullclean idf.py flash monitor
方案2:升级ESP-IDF到适配高版本CMake的分支
如果需要保留系统全局的CMake 3.22版本,可以将本地ESP-IDF和esp-box代码都切换到release/v5.0及以上的稳定分支,这些分支已经适配了CMake 3.22+的权限校验逻辑。注意切换分支后需要重新执行ESP-IDF根目录下的install.sh安装对应版本的依赖,同时要确认切换后的esp-box分支与你的硬件版本匹配,避免出现硬件驱动不兼容问题。
注意:无论选择哪种方案,切换完环境后必须执行
idf.py fullclean清除旧的构建缓存,否则缓存中残留的旧CMake配置仍会触发相同报错。
内容的提问来源于stack exchange,提问作者Paulsk
相关产品推荐
相关产品推荐

