如何在完整路径my_project/src/include_me.rs中包含文件main.rs?
我已经检查了依赖指南,所有这些指南似乎都包含了二进制文件.我也检查了"The Book",但其中没有一个例子以".rs"结尾.
如何include_me.rs使用项目的其余部分进行编译?
编辑:虽然"可能重复"将是一个包含这个问题的答案的好地方,但它并不包含它.这个问题的最佳答案中的语法更加相关,并在"重复"的问题中掩盖了
Luk*_*odt 30
Rust中基本上有两种(主要)方式来包含来自其他地方的代码:
如果您include_me.rs属于您的项目,则应将其移至同一文件夹main.rs中:
??? src
??? include_me.rs
??? main.rs
Run Code Online (Sandbox Code Playgroud)
然后你可以写在你的main.rs:
mod include_me;
fn main() {
// Call a function defined in the other file (module)
include_me::some_function();
}
Run Code Online (Sandbox Code Playgroud)
一个mod声明,让编译器锈找相应的.rs自动文件!
因此,属于您的项目的所有内容都属于与main.rs(或lib.rs)所在的文件夹相同的文件夹(或其子文件夹).然后通过模块系统"包含"文件.要阅读有关模块的详细介绍,请阅读Rust书中有关模块的章节.模块系统非常重要,因此对学习Rust非常重要.
如果您include_me.rs的某些内容不属于您的实际项目,而是您在多个项目中使用的有用内容的集合,则应将其视为库.要包含此类外部库的代码,您必须使用该include_me.rs机制.为了让您的生活更轻松,您真的想要使用Cargo!
因此,让我们准备您的cargo new my_library --lib货运图书馆项目.您需要以下文件结构(由...自动生成include_me.rs):
. my_library
??? Cargo.toml
??? src
??? lib.rs
Run Code Online (Sandbox Code Playgroud)
现在将所有内容复制lib.rs到lib.rs(这只是调用库项目的根文件的惯例my_library).假设~/code/my_library文件夹的完整路径是main.rs.
现在让我们准备您的主项目的货物项目.它有一个类似的文件结构(但是lib.rs代替my_library,因为它是一个可执行项目,而不是一个库项目):
. my_project
??? Cargo.toml
??? src
??? main.rs
Run Code Online (Sandbox Code Playgroud)
要声明你的依赖Cargo.toml,你必须把它放到你的"../my_library":
[package]
name = "my_project"
version = "0.1.0"
authors = ["you"]
edition = "2018"
[dependencies]
my_library = { path = "~/code/my_library" }
Run Code Online (Sandbox Code Playgroud)
您也可以使用相对路径(main.rs),但它才有意义,如果你知道,这两个项目一直停留在原地,相对于彼此(如果它们都在同一个仓库管理等).
现在你可以crates.io写下:
use my_library::some_function();
fn main() {
// Call a function defined in the other file (extern crate)
some_function();
}
Run Code Online (Sandbox Code Playgroud)
如果要上传这两个项目中的任何一个,则必须与之交互extern crate my_library;,但这是另一个主题.
是的,但你不应该使用它们.有一个main.rs宏允许你逐字包含其他文件,就像extern crate来自C-land.但是,强烈建议不要在模块系统能够解决问题的情况下使用它.include!()仅在非常特殊的情况下才有用,通常链接到生成代码的更复杂的构建系统.
| 归档时间: |
|
| 查看次数: |
9215 次 |
| 最近记录: |