我有一个长篇故事和30KLoC标题的专有库。我想为它生成Rust的绑定。我几乎成功地使用了bindgen
箱子。除bindgen
之外,不能将宏常量转换为常规常量。因为这些常量是以模糊的方式定义的,比如
#define CONSTANT ((const_type)SOME_OTHER_CONSTANT)
那么,有没有办法将这些半常数转换为正常的Rust常量:
const Type name = value;
更新
显然,crate bindgen
使用clang
作为后端。如果向解析器提供了右标志,clang
能够处理宏定义和其他类似的东西。那么,有人可以建议使用libclang
API处理宏定义的好教程吗?
答案 0 :(得分:0)
通过gcc -E
(即预处理器)运行标头将删除#define
。它可能会删除超出您想要的内容。
如果你想有选择地进行预处理,曾经有一个名为scpp
的实用程序就是这样做的。除了要下载的一些tar文件之外,我无法立即找到它的引用,但你可能会有更多的运气。