gpt4 book ai didi

rust - Rust build.rs 脚本的条件编译?

转载 作者:行者123 更新时间:2023-11-29 07:55:40 43 4
gpt4 key购买 nike

Rust 语言支持 conditional compilation使用像 #[cfg(test)] 这样的属性。Rust 还支持 build scripts使用 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
}

这不起作用,因为 build 在这里不是有效的标识符。是否可以使用不同的属性来做到这一点,或者是否可以使用其他一些技巧来实现类似的目的?


关于这个问题的一些上下文:
我的目标是在编译时通过 clap 生成 shell 补全脚本。我对应用程序中的多个文件有相当全面的 App 定义。我想在 build.rs 中使用它,方法是使用 include!(...) 宏(如 suggested by clap),所以我不必再次定义 App。这会带来一些依赖性,我想在 build.rs 文件使用时排除它们,因为在这种情况下不需要它们。 This是我试图在我的 build.rs 脚本中提供的内容。

最佳答案

您可以将构建代码放在 build.rs 中(或者大概让 build.rs 声明一个 mod xyz 以引入另一个文件)。

我想知道您要问的问题是否是您是否可以从 build.rs 和 main.rs 引用相同的代码,如果可以,该代码是否可以判断它是否被一个或另一个调用。似乎您可以在使用 build.rs 时打开环境变量集(使用类似 option_env 的东西,但可能更好的方法是在 build.rs 中的主代码中启用功能。

(如果您还没有阅读 the documentation for build scripts,请阅读。)

关于rust - Rust build.rs 脚本的条件编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229433/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com