在学习getrandom的源码时,碰到一个条件编译的疑惑,这里先把源码缩减如下(具体源码见链接):
cfg_if! {
if #[cfg(any(target_os = "android", target_os = "linux"))] {
#[path = "linux_android.rs"] mod imp;
} else if #[cfg(windows)] {
#[path = "windows.rs"] mod imp;
} else if #[cfg(feature = "rdrand")] {
#[path = "rdrand.rs"] mod imp;
} else {
compile_error!("XXXXXX");
}
}
请问一下,针对这段条件编译代码,能实现把rdrand.rs文件里的代码编译进目标平台是linux的crate里吗?
如果能,该如何传递编译参数?
还是即便启用了 rdrand feature,是不是也无法走到 else if #[cfg(feature = "rdrand")]
这个分支里?
Ext Link: https://github.com/rust-random/getrandom/blob/master/src/lib.rs
1
共 1 条评论, 1 页
评论区
写评论自己摸索了一下。 我在Cargo.toml里先启用 rdrand feature:
在在源码里注释掉:
这样就把rdrand.rs文件里的代码编译进了crate里了。 所以要针对linux平台启用 rdrand 这一 target_feature,可能还是必须得(如上)修改源码。