标签:val 生成器 名称 是你 根目录 时间 平台 变量 arc
查看原文:Build Script Support
有些包需要编译第三方的非Rust代码,比如说C库。其他包需要链接到C库,这些C库可能位于系统磁盘上,也有可能需要从源代码中构建。其他人仍然需要一些功能,比如在构建之前的代码生成(考虑解释器生成器)(没明白是什么意思)。
Cargo并不是为了取代这些针对这些任务进行了良好优化的其他工具,但是它确实与构建配置选项集成在一起了:
一、如何使用构建脚本
在Cargo.toml文件中
[package] # ... build = "build.rs"
构建命令(相对于包的根)指定的Rust文件,将在其他任何在包中东西被编译之前被编译和调用,这能允许你的Rust代码依赖于构建或生成的组件。
注意:如果你没有为构建命令指定值,但是你的包根目录下确实存在一个"build.rs"文件,Cargo将会为你编译并调用这个文件。
构建命令的一些用例如下:
下面详细介绍每个用例,以给出构建命令如何工作的示例。
一、构建脚本的输入
当构建脚本运行时,构建脚本有大量的输入,所有的输入都以环境变量的形式传递。而除了环境变量之外,构建脚本的当前目录是构建脚本包的源目录。
二、构建脚本的输出
通过构建脚本输出到stdout的所有行,都会被写到文件中如:target/debug/build/<pkg>/stdout(具体位置可能取决于你的配置)。任何以 "cargo:" 开头的行都会被Cargo直接解释。这一行必须是这种格式:
cargo:key=value
如下所示:
# specially recognized by Cargo cargo:rustc-link-lib=static=foo cargo:rustc-link-search=native=/path/to/foo cargo:rustc-cfg=foo cargo:rustc-env=FOO=bar # arbitrary user-defined metadata cargo:root=/path/to/foo cargo:libdir=/path/to/foo/lib cargo:include=/path/to/foo/include
另外,打印到stderr的行会被写入到一个文件:target/debug/build/<pkg>/stderr,但是不会被Cargo解释。
Cargo会识别一些特殊的关键字,会一定程度上影响crate的构建方式:
标签:val 生成器 名称 是你 根目录 时间 平台 变量 arc
原文地址:http://www.cnblogs.com/yishuyuan/p/7455777.html