Ten*_*ken 5 rust rust-cargo rust-proc-macros
我正在处理一个程序宏,该宏需要一个位置来在运行它的系统上存储状态。cargo clean运行时应清除状态。
过去,我假设target目录是正确的位置。但是,我的假设可能不正确,因为:
rustc和冲突cargo。为了避免这些问题,我一直在尝试确定一种正确定位位置的方法,但是并没有成功。我找到的最接近的是OUT_DIRCargo为构建脚本设置的环境变量,不幸的是,它没有为程序宏运行设置。
请注意,此问题不是“ 是否可以在Rust的程序宏中存储状态?”的重复项。。这个问题通常涵盖程序宏状态,而这个问题是关于在包装箱的文件结构中确定合适的位置。
看来存储临时文件的最佳位置是使用:(1)在编译运行期间持续存在并且(2)也被 Cargo 清理OUT_DIR:
\n\n\n
OUT_DIR\xe2\x80\x94 如果包有构建脚本,则将其设置为构建脚本应放置其输出的文件夹。请参阅下面的详细信息。(仅在编译期间设置。)
如果我没记错的话,此环境变量仅可用于构建脚本,因此您必须使用构建脚本来公开板条箱其余部分的路径。请注意,它OUT_DIR 与任何使用宏进行给定编译运行的包共享,因此您需要以使用该目录的方式来考虑这一点以避免冲突。
该解决方案分步骤:
\nOUT_DIR通过将以下行添加到程序宏包的构建脚本中,将其重新导出到包的其余部分:
println!("cargo:rustc-env=PROC_ARTIFACT_DIR={}", \n std::env::var("OUT_DIR").unwrap() )\nRun Code Online (Sandbox Code Playgroud)\n在程序宏中使用env!("PROC_ARTIFACT_DIR")来获取状态目录的路径。
在 Cargo 正确支持临时目录(?)之前,这只能作为临时解决方法。此方法的全部功劳归功于@sven-marnach。
\n| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |