首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在build.rs阶段生成锈蚀代码

在build.rs阶段生成锈蚀代码
EN

Stack Overflow用户
提问于 2022-11-24 22:07:21
回答 1查看 38关注 0票数 0

我正在尝试使用Rust的build.rs代码包装一个C库。在configure阶段,可以设置一堆标志,比如MAX_LEVEL=5DERIVATION=2。在这种情况下,脚本将在C代码中生成一个指针到函数的数组。

代码语言:javascript
复制
#define MAX_LEVEL 5

void (*evaluate_level[MAX_LEVEL])(/* args */);
void (*derivation_1[MAX_LEVEL])(/* args */);
void (*derivation_2[MAX_LEVEL])(/* args */);

其中,级别i值是通过调用evaluate_level[i](&arg)来计算的,而一阶/二阶派生是使用derivation_1[i](&arg)derivation_2[i](&arg)计算的。可以通过增加DERIVATION和重新编译库来支持高阶派生。

现在在我的锈蚀包装里,lib.rs,我想

pub fn get_max_level() -> u32 { 5 }.

  • 知道MAX_LEVEL设置为5,例如在某个地方创建pub const MAX_LEVEL: u32 = 5;语句;或者,有一个板条箱函数MAX_LEVEL

  • 还可以通过设置

生成derivation代码。

代码语言:javascript
复制
#[repr(C)]
pub struct EvaluateArg(/* private fields */);


const DERIVATION: [fn(u32, *mut EvaluateArg); 2] = [/* ... */];

或拥有

代码语言:javascript
复制
pub const MAX_DERIVATIONS: u32 = 2;

pub fn derivation_1(level: u32, arg: &mut EvaluateArg);
pub fn derivation_2(level: u32, arg: &mut EvaluateArg);

使用宏或其他方式,例如手动生成代码?

通过某种方式设置build.rs可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 04:35:02

正如注释中所提到的那样,标准库bindgen将通过clang解析C++头文件,并生成相应的绑定Rust代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74566632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档