12次发布
0.5.5 | 2024年2月9日 |
---|---|
0.5.4 | 2024年2月4日 |
0.5.1 | 2024年1月30日 |
0.5.0 | 2023年3月22日 |
0.1.2 | 2021年2月15日 |
#138 在 构建实用工具
每月186次下载
用于 12 个crates (7 个直接)
14KB
169 行
项目目标
为上游crates提供一个从下游crates收集信息的机制。
用例
用例1,匿名结构体
Rust尚未提供匿名结构体。为了模拟此功能,我们希望在定义结构体字段和访问其值的地方定义结构体。提供匿名结构体模拟的上游crate必须知道其下游crate源代码中的所有临时struct
,以便在下游crate开始编译之前定义它们。
用例2,消除多个-sys
crates
如果我们可以有一种统一的方法来编译来自"C世界"的API,而不是维护多个-sys
crates,那会很好。并且定义在相同头文件中的相同API可能被分离到不同的-sys
crates中,例如tcl_sys::TCL_OK
和tk_sys::TCL_OK
。一些crate,如cib,试图提供一种统一的方法来编译C库,并提供了统一的命名空间clib::
。
从下游crates收集的信息
调用inwelling::collect_downstream()
将收集以下信息,这些信息来自在其build.rs
中调用inwelling::to()
的crates。
-
包名。
-
Cargo.toml
中定义的元数据。 -
Cargo.toml
的清单路径。 -
源文件路径(可选)。使用参数
inwelling::Opt::dump_rs_paths == true
调用collect_downstream()
以进行收集。
快速入门
-
上游crate(例如
crate foo
)在其build.rs
中调用inwelling::collect_downstream()
,并为其下游生成API。 -
下游crate(例如
crate bar
)在其build.rs
中调用inwelling::to()
。
// build.rs
fn main() { inwelling::to( "foo" ); }
要将一些元数据发送到上游,请将其编码在 Cargo.toml
的包元数据中。
[package.metadata.inwelling.foo]
answer = { type = "integer", value = "42" }
许可证
根据Apache许可证2.0或MIT许可证,由您选择。
依赖项
~0.4–8MB
~54K SLoC