Tim*_*sée 6 conditional-compilation rust
锈病语言支持条件编译使用类似的属性#[cfg(test)]。Rust 还支持使用文件来运行代码的构建脚本build.rs,作为构建过程的一部分以准备编译。
我想在 Rust 代码中使用条件编译来根据我们是否正在编译构建脚本来有条件地编译,类似于test构建的可能方式。
想象一下:
#[cfg(build)]
fn main() {
// Part of build script
}
#[cfg(not(build))]
fn main() {
// Not part of build script, probably regular build
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为build这里不是有效的标识符。是否可以使用不同的属性来做到这一点,或者可以使用其他一些技巧来实现类似的目标?
对于此问题的某些上下文:
我的目标是clap在编译时生成 shell 完成脚本。我App对应用程序中的多个文件有相当全面的定义。我想build.rs通过使用include!(...)宏包含这些部分来使用它(如 所建议的clap),所以我不必App第二次定义。这会与它产生一些依赖关系,我想在build.rs文件使用时将其排除,因为在这种情况下不需要它们。这就是我试图在我的build.rs脚本中提供的内容。
您可以将构建代码放入 build.rs 中(或者可能让 build.rs 声明一个 mod xyz 来拉入另一个文件)。
我想知道您想问的问题是否是您是否可以从 build.rs 和 main.rs 引用相同的代码,如果可以,该代码是否可以判断它是否被其中一个或另一个调用。看来您可以在使用 build.rs 时打开环境变量集(使用类似的东西option_env,但可能更好的方法可能是从 build.rs 中启用主代码中的功能。
(如果您还没有阅读过构建脚本的文档,请阅读一下。)
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |