| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 fix/eclipse-hidden-source-exclusion 分支,关联的 Pull Request 也会同步更新。 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
Sorry, something went wrong.
Sorry, something went wrong.
| if fullname not in paths: | ||
| ret.append(fullname) | ||
| else: | ||
| ret = ret + ExcludePaths(fullname, paths) | ||
| ret.extend(ExcludePaths(fullname, paths)) |
There was a problem hiding this comment.
如果 BSP 自身是 Git 仓库,CollectPaths() 会把根目录下的 .git 加入 all_paths,这里便进入递归。随后候选路径变成 .git/objects,无法命中新增的 .git 名称判断,仍会扫描整个对象库。
Sorry, something went wrong.
There was a problem hiding this comment.
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
为什么提交这份PR (why to submit this PR)
当前 tools/targets/eclipse.py 在执行 scons --target=eclipse 生成 Eclipse/CDT 工程时,ExcludePaths() 会无条件跳过所有以 . 开头的隐藏目录:
这会导致隐藏目录无法进入后续的 source exclusion 计算。
对于只包含配置文件的 .git、.vscode、.settings 等目录,这通常不会产生明显问题;但如果隐藏目录中存在可编译源文件,例如:
component/ ├── SConscript ├── src/ └── .github/ └── ci/ ├── device-host-test.c └── lifecycle-host-test.c而这些 *.c 文件并没有被对应 SConscript 加入目标固件构建,则原生 SCons 构建不会编译它们。
但是通过:
生成 Eclipse/CDT Managed Build 工程后,由于 .github 被 ExcludePaths() 直接跳过,没有加入 .cproject 的 excluding 列表,CDT 仍可能把其中的 *.c 文件识别为工程源码,并在 IDE Build 时进行目标平台编译。
实际使用中可以导致类似以下情况:
中的 Host Test stub 与真实 RT-Thread API 同时参与 ARM firmware 编译,从而出现:
等错误。
该问题并不局限于 .github。
类似:
等任何包含源代码的隐藏目录,只要没有参与实际目标构建,都可能遇到同样的问题。
因此这里需要修复的是 Eclipse source exclusion 对隐藏目录的一般处理逻辑,而不是对 .github 做特殊处理。
你的解决方案是什么 (what is your solution)
本 PR 修改 tools/targets/eclipse.py 中隐藏目录的 source exclusion 处理逻辑。
主要修改如下:
隐藏目录现在与普通目录使用相同的 exclusion 判断逻辑:
这样可以避免隐藏目录绕过 Eclipse source exclusion 计算。
原来的逻辑:
会导致以下结构无法被检测:
unused/ └── .tests/ └── host-test.c本 PR 改为允许递归检查普通隐藏目录,从而能够正确检测其中是否存在:
等 Eclipse 可编译源文件。
为避免递归扫描:
等可能包含大量文件的版本控制元数据目录,增加:
CollectAllFilesinPath() 不递归这些目录。
同时,如果这些目录已经被判定为 exclusion candidate,则直接加入 Eclipse exclusion,而不继续扫描其内部文件。
因此本次修改不会为了判断 .git 是否包含源文件而递归遍历 .git/objects 等目录。
最终行为为:
普通目录 | +-- 参与工程 -> 按原有逻辑继续分析 | +-- 未参与工程 -> 检查是否包含源代码并生成 exclusion 隐藏目录 | +-- 参与工程 -> 按原有逻辑继续分析 | +-- 未参与工程 -> 检查是否包含源代码并生成 exclusion .git / .svn / .hg | +-- 未参与工程 -> 直接 exclusion,不递归扫描本 PR 不修改原生 SCons firmware build 的源码选择逻辑,仅修复 scons --target=eclipse 生成的 Eclipse/CDT source exclusion 与实际工程源码选择不一致的问题。
请提供验证的bsp和config (provide the config and bsp)
BSP:
bsp/stm32/stm32f407-atk-explorer
.config:
本修改属于 Eclipse project generator 修复,不依赖额外 Kconfig 配置。
action: