通过“include!”找不到外线“mod”的文件

问题描述 投票:0回答:1

我的文件结构如下所示(是的,这是为了代码的出现):

days.rs
days/
  day01.rs
  day02.rs
  ...

我在

days.in
中生成了一个
build.rs
文件,看起来像这样:

pub mod day01;
pub mod day02;
...

然后我

include!
这个文件在
days.rs

include!(concat!(env!("OUT_DIR"), "/days.in"));

当我

cargo run
cargo build
时,我每天都会重复这个错误:

error[E0583]: file not found for module `day01`                                                                                       
 --> D:\Projects\advent-of-code-2024\target\debug\build\advent-of-code-2024-59c0dcca155b0f0e\out\days.in:1:1
  |
1 | pub mod day01;
  | ^^^^^^^^^^^^^^
  |
  = help: to create the module `day01`, create file "D:\Projects\advent-of-code-2024\target\debug\build\advent-of-code-2024-59c0dcca155b0f0e\out\day01.rs" or "D:\Projects\advent-of-code-2024\target\debug\build\advent-of-code-2024-59c0dcca155b0f0e\out\day01\mod.rs"      
  = note: if there is a `mod day01` elsewhere in the crate already, import it with `use crate::...` instead

我注意到错误位于

days.in
,而我希望它位于
days.rs

我怀疑这可能是我误解了什么。

include!
不就是直接“复制粘贴”目标文件的内容来代替宏吗?


当我手动包含该文件时,只需复制

days.in
的内容并用它替换
include!
,它就可以正常工作!

rust
1个回答
0
投票

您的假设根本就是错误的,

include!
不会“复制并粘贴”任何内容:

根据上下文将文件解析为表达式或项目。

解析文件涉及声明模块,因此它们仍然相对于包含的文件,而不是包含的文件。

© www.soinside.com 2019 - 2024. All rights reserved.