[tools][cmake] fix type handling when generating CMake targets #11149
+19
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.



拉取/合并请求描述:(PR description)
为什么提交这份PR (why to submit this PR)
在 ubuntu 使用
scons --target=cmake生成 CMake 工程时,当前 CMake 生成器在处理CPPDEFINES会抛出异常。试了几个 bsp,基本上都有这个问题
报错信息一致
你的解决方案是什么 (what is your solution)
CMake 生成脚本在拼接宏定义时,遇到了一个「tuple(元组)」类型的宏,而不是字符串,导致 Python 报错。
增加调试输出查看 i 的类型和值
得到输出
当前 CMake 生成器在处理 CPPDEFINES 时默认假设宏定义为字符串类型,并直接进行字符串拼接生成 -D 参数。
当遇到 SCons 规范化后的 tuple 形式宏定义(例如 ('STM32F407xx',))时,由于未进行类型判断,导致在字符串拼接阶段触发 TypeError,从而中断 CMake 工程的生成流程。
需要说明的是,该问题并非 BSP 或用户宏定义写法错误,而是 CMake 生成器对 CPPDEFINES 的类型假设过于严格。
本 PR 对 CMake 生成器中 CPPDEFINES 的处理逻辑进行了完善,使其能够正确兼容 SCons 中合法的宏定义表示形式:
保持原有字符串形式宏定义的处理方式不变
该修改使 CMake 工程生成行为与 SCons 的宏定义语义保持一致,提高了工具链的健壮性和兼容性。
影响范围
请提供验证的bsp和config (provide the config and bsp)
在这两个 bsp 中验证,
执行
scons --target=cmake后,不再报异常,可以成功使用 cmake 构建工具。当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up