一个Raylib的函数、宏的重命名工具,告别与windows.h的冲突

raylib_lex_renamer_tool

一个小型C++17实用程序,用于使用词法分析器(基于标记的重写)为 raylib 标识符添加前缀/重命名。
核心行为:

  • 仅重写标识符(例如,CloseWindowRL_CloseWindow

  • 修改注释字符串字面量字符字面量C++ 原始字符串中的匹配项。

  • 可以通过词法解析raylib头文件来构建符号列表(无需正则表达式)

当您想要避免名称冲突(例如 Windows SDK / 其他库)而又不想修补系统头文件时,这非常有用。

建造

cmake -S . -B build
cmake --build build --config Release

输出:build/raylib_renamer

用法

1 从 raylib 中提取 + 重写项目(复制到输出)

./build/raylib_renamer \
  --root path/to/your/project \
  --out  path/to/rewritten_project \
  --raylib-src path/to/raylib/repo_or_src \
  --using-expand-headers \
  --api-define RLAPI,RMAPI \
  --prefix RL_

2 原地重写

./build/raylib_renamer \
  --root path/to/your/project \
  --in-place \
  --raylib-src path/to/raylib/repo_or_src \
  --using-expand-headers \
  --api-define RLAPI,RMAPI \
  --prefix RL_

3 导出符号表

仅列出姓名:

./build/raylib_renamer \
  --root path/to/your/project \
  --out  rewritten \
  --raylib-src path/to/raylib/repo_or_src \
  --using-expand-headers \
  --dump-symbols symbols.txt

更丰富的符号数据库(TSV:包含函数类型和元数提示):

./build/raylib_renamer \
  --root path/to/your/project \
  --out  rewritten \
  --raylib-src path/to/raylib/repo_or_src \
  --using-expand-headers \
  --dump-symbols-db symbols.db.tsv

If you want to keep the symbol baseline strictly limited to the public header only, use
`--raylib-src ... --strict-public-api` together with `--raylib-h`.

您可以稍后重复使用该数据库:

./build/raylib_renamer \
  --root path/to/your/project \
  --out  rewritten \
  --symbols-db symbols.db.tsv

4 消费者模式(推荐用于类似 JackalClient 的项目)

https://github.com/JackalClient/JackalClient-raylib

消费者模式增加了安全启发式规则:

  • 跳过预处理器指令内的标识符(除非已启用)

  • 跳过obj.Member,,合格obj->MemberType::Member出现

  • 通过启发式方法检测每个文件中的隐藏(本地定义)名称并跳过它们。

  • 对于函数,仅当它看起来像一个函数调用时才进行替换Name(...),并且(如果可用)会根据 raylib 签名提示检查参数数量。

  • 如果某个事件看起来可疑,默认设置为不替换。

./build/raylib_renamer \
  --root path/to/JackalClient \
  --out  JackalClient_renamed \
  --symbols-db symbols.db.tsv \
  --consumer-mode \
  --export-consumer-context jc_context.json

如果你真的想替换掉哪怕是可疑的事件:

./build/raylib_renamer ... --consumer-mode --consumer-force

5 排除目录

./build/raylib_renamer \
  --root path/to/your/project \
  --out rewritten \
  --symbols-db symbols.db.tsv \
  --exclude-dir external,build,.git

笔记

  • Windowscmd.exe引用陷阱:避免在带引号的路径末尾添加反斜杠\。请使用"C:\\path\\to\\dir\n(不带尾部反斜杠),或 "...\\dir\\."\n

  • 预处理器运算符defined(...)永远不会被重写。

  • --with-macros/--with-enum-values默认是关闭的,因为重命名这些选项可能会破坏构建标志或代码假设。

  • 这是原RLRenamer的文档。

致谢

https://github.com/noexcept2005

https://github.com/AlexAdasCca

项目