7 个版本
0.1.6 | 2024 年 4 月 17 日 |
---|---|
0.1.5 | 2024 年 3 月 26 日 |
0.1.4 | 2023 年 7 月 15 日 |
0.1.3 | 2023 年 3 月 3 日 |
0.1.0 | 2022 年 1 月 3 日 |
#152 in 构建工具
9,001 个月下载量
用于 7 个 crate (4 直接)
49KB
1K SLoC
CARGO_ENCODED_RUSTFLAGS 的解析器
CARGO_ENCODED_RUSTFLAGS
是 Cargo 为构建脚本提供的环境变量之一。它综合了影响 Cargo 的 rustc 调用的多个标志来源
- 通过 RUSTFLAGS 环境变量传递的标志
- Cargo 配置条目在
target.<triple>.rustflags
和target.<cfg>.rustflags
以及build.rustflags
中,包括来自项目特定的 Cargo 配置文件和用户 CARGO_HOME 中的 Cargo 配置
如果构建脚本需要执行一些 rustc 调用,或者需要描述即将进行的 rustc 调用的某些方面,它可能需要这些标志。
[build-dependencies]
rustflags = "0.1"
示例
此构建脚本使用 cmake
crate 编译一些 C 代码,如果 Rust 构建使用 sanitizers 进行,则必须使用特定的 C 预处理器 #define 来配置它。
// build.rs
use rustflags::Flag;
use std::env;
use std::path::PathBuf;
fn main() {
let manifest_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
let lib_source_dir = manifest_dir.join("lib");
assert!(lib_source_dir.join("CMakeLists.txt").exists());
let mut builder = cmake::Config::new(lib_source_dir);
// Look for -Zsanitizer=address
for flag in rustflags::from_env() {
if matches!(flag, Flag::Z(z) if z == "sanitizer=address") {
builder.define("ENABLE_SANITIZERS", "ON");
builder.define("SANITIZERS", "address");
break;
}
}
builder.build();
}
许可证
根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT 许可证。除非您明确说明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在此 crate 中的贡献,均应按上述方式双重许可,而无需附加条款或条件。