6 个版本
0.2.0 | 2022 年 1 月 13 日 |
---|---|
0.1.4 | 2021 年 4 月 28 日 |
0.1.3 | 2021 年 2 月 8 日 |
214 在 构建工具 中
每月 1,263 次下载
在 duckdb-extension-framewor… 中使用
46KB
930 行
为什么?
我创建这个库是因为我觉得传递指令给 build.rs 的方式很容易出错(尤其是使用字符串时),并且感觉 Rust 没有提供 API 或官方外部包(比如 rand
)。
安装
将以下内容添加到您的 Cargo.toml
[build-dependencies]
build_script = "0.2.0"
示例
use build_script::{cargo_rustc_link_lib, cargo_rustc_link_search, BuildScript, Instruction, Value};
fn main() {
// basic instructions
build_script::cargo_rerun_if_changed("something.txt");
build_script::cargo_rerun_if_env_changed("PKG_CONFIG");
build_script::cargo_rustc_link_lib("somelibrary");
build_script::cargo_rustc_link_lib_mapping(cargo_rustc_link_lib::Kind::DynamicLibrary, "somelibrary");
build_script::cargo_rustc_link_search("something-else.txt");
build_script::cargo_rustc_link_search_mapping(cargo_rustc_link_search::Kind::Crate, "something-else.txt");
build_script::cargo_rustc_flags("-l ffi");
build_script::cargo_rustc_cfg("key");
build_script::cargo_rustc_cfg_mapping("key", "value");
build_script::cargo_rustc_env("var", "value");
build_script::cargo_rustc_cdylib_link_arg("flag");
build_script::cargo_mapping("key", "value");
// other, advanced instructions
let mut build_script = BuildScript::default();
let instruction = {
let value = Value::Singular("something".into());
Instruction::new("instruction", value)
};
// add a custom instruction to the instruction stack
build_script.custom_instruction(instruction);
// write all instructions to something (for this scenario, and also usually, its stdout)
build_script.build();
}
有关更多信息,请参阅文档。
术语
指令
指令是传递给 cargo 的内容。例如:cargo:rerun-if-env-changed=ENV
。以下将对此进行解析。
指令分为三个部分
前缀
前缀是分隔符 :
之前的字符串:cargo
。
通常前缀是 cargo
,但在这个包中,为了未来的兼容性,可以使用其他自定义前缀,以防添加其他前缀。
名称
名称是分隔符 :
和 =
之间的字符串:rerun-if-env-changed
。
如果名称未知,指令将自动映射(见下文)。
值
值是分隔符 =
之后的字符串:ENV
。
这代表了指令的值。
映射
有一种类型的指令是映射:cargo:KEY=VALUE
。
这实际上是
由
links
脚本使用的元数据。
源代码可以在这里找到:这里。
当指令名称未知时使用。
依赖项
~48KB