首页 > 解决方案 > 分层货物预构建脚本

问题描述

我怎样才能干净地添加几个默认情况下从不构建的货物二进制目标,但是如果手动cargo run构建但没有构建我的整个板条箱?

我需要几层表用于扩展字段算术和 FFT,每一层都用于构建后面的层。

我将pub(crate) static使用单独的特定于层的构建脚本生成包含每个层表的 s 的rust 源文件,该脚本include!mod仅是最终库 crate 的初始段。

我会像手动调用这些构建脚本,也cargo run make_layer_one可能使用 a 来调用这些构建脚本Makefile,但它们应该将输出.rs文件直接写入src,而不是写入OUT_DIR,并将结果检查到 git 中,这样普通用户就不会重新运行这个烂摊子了。

看起来 cargo 在src/bin/和其他地方的二进制目标都构建了整个 crate,除了build.rs. 有什么build.rs特别之处?如何添加其他类似的目标?

此外,是否有任何#[cfg(..)]属性可以显示二进制构建目标?在最坏的情况下,我可以像可能那样添加 bash 脚本cargo run make_layer_three -- --cfg layer_one --cfg layer_two,但是如果 cargo 经常构建这些目标,那么它们会接触src和混淆 cargo。


算术显然不能容忍lazy_static, , 等中使用的原子保护的 2ns 惩罚std::sync::Oncestd::lazy::*实际上static_init避免了这个 2ns 惩罚,但在 Mac OS 上缺少多层。理论上,一个人可能只在初始化阶段使用原子守卫,由 static_init 触发,然后unsafe { .. }用于算术,但这看起来不必要的复杂。

标签: makefilerust-cargo

解决方案


推荐阅读