我正在尝试用Rust的build.rs
代码 Package 一个C库。在configure
阶段,可以设置一堆标志,比如MAX_LEVEL=5
,DERIVATION=2
。在这种情况下,脚本将在C代码中生成一个指向函数的指针数组,例如:
#define MAX_LEVEL 5
void (*evaluate_level[MAX_LEVEL])(/* args */);
void (*derivation_1[MAX_LEVEL])(/* args */);
void (*derivation_2[MAX_LEVEL])(/* args */);
其中,通过调用evaluate_level[i](&arg)
来计算级别i
值,而使用derivation_1[i](&arg)
和derivation_2[i](&arg)
来计算一阶/二阶导数。通过增加DERIVATION
并重新编译库,可以支持更高阶的导数。
现在,在我的Rust Package 器lib.rs
中,我想
- 知道
MAX_LEVEL
被设置为5,例如在某处创建一个pub const MAX_LEVEL: u32 = 5;
语句;或者具有栅格函数pub fn get_max_level() -> u32 { 5 }
。 - 此外,也可以通过设置
#[repr(C)]
pub struct EvaluateArg(/* private fields */);
const DERIVATION: [fn(u32, *mut EvaluateArg); 2] = [/* ... */];
或具有
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
,这是可能的吗?
1条答案
按热度按时间wrrgggsh1#
正如@Caesar在注解中提到的,标准库
bindgen
将通过clang
解析C++头文件,并生成相应的绑定Rust代码。