包含的源不会看到使用时导入的类型

时间:2015-01-22 19:58:18

标签: macros include rust

我正在努力包括在内!一些自动生成的代码到模块中。我的模块看起来像......

use libc::c_int;

mod nif_versions {
include!(concat!(env!("OUT_DIR"), "/nif_versions.snippet"));
}

...和nif_versions.snippet看起来像......

const NIF_MAJOR_VERSION: c_int = 2;
const NIF_MINOR_VERSION: c_int = 7;

但是这给了我以下错误:

/home/goertzen/ruster/target/build/ruster-7f1b6b5473eea720/out/nif_versions.snippet:1:26: 1:31 error: use of undeclared type name `c_int`
/home/goertzen/ruster/target/build/ruster-7f1b6b5473eea720/out/nif_versions.snippet:1 const NIF_MAJOR_VERSION: c_int = 2;
                                                                                                               ^~~~~
note: in expansion of include!

如果我跳过包含!手动粘贴这两行,一切正常。此外,我必须将include包装在一个模块中以使其工作。如果可能的话,我想摆脱它。

1 个答案:

答案 0 :(得分:3)

您只需将use libc::c_int移至内部mod声明,因为use仅在其使用的模块内有效:

mod nif_versions {
    use libc::c_int;
    include!(concat!(env!("OUT_DIR"), "/nif_versions.snippet"));
}