Cargo Init 和 Cargo New 的异同点及适用场景深度剖析

文摘   2024-11-17 09:47   北京  

Cargo 简介

Cargo是 Rust 的包管理器和构建系统。它负责管理项目的依赖、构建代码、运行测试以及发布包。Cargo 使得 Rust 项目的开发变得更加简单和高效。

Cargo 的主要功能包括:

  • 依赖管理: 通过Cargo.toml文件管理项目的依赖。
  • 构建系统: 编译项目代码并生成可执行文件或库。
  • 测试运行: 运行项目的单元测试和集成测试。
  • 包发布: 将项目打包并发布到crates.io[1]

cargo new命令介绍

cargo new命令用于创建一个新的 Rust 项目。它会生成一个完整的项目结构,包括Cargo.toml文件、src/目录以及默认的源代码文件(main.rslib.rs)。

常用选项

  • --bin: 创建一个二进制项目(默认)。
  • --lib: 创建一个库项目。
  • --vcs none: 不初始化版本控制系统(如 Git)。
  • --name <name>: 指定项目的名称。

示例

cargo new my_project --bin

生成的目录结构:

my_project/
├── Cargo.toml
└── src
└── main.rs

Cargo.toml内容:

[package]
name = "my_project"
version = "0.1.0"
edition = "2021"

[dependencies]

src/main.rs内容:

fn main() {
    println!("Hello, world!");
}

cargo init命令介绍

cargo init命令用于在当前目录中初始化一个新的 Rust 项目。它不会创建新的目录,而是在当前目录中生成Cargo.toml文件和src/目录。

常用选项

  • --bin: 初始化为二进制项目(默认)。
  • --lib: 初始化为库项目。
  • --vcs none: 不初始化版本控制系统(如 Git)。
  • --name <name>: 指定项目的名称。

示例

假设你已经在my_existing_project目录中开始编写代码:

cd my_existing_project
cargo init --bin

生成的目录结构:

my_existing_project/
├── Cargo.toml
└── src
└── main.rs

Cargo.toml内容:

[package]
name = "my_existing_project"
version = "0.1.0"
edition = "2021"

[dependencies]

src/main.rs内容:

fn main() {
    println!("Hello, world!");
}

异同点

  1. 功能差异:

  • cargo new: 创建一个新的 Rust 项目,包括初始化 Git 仓库(除非指定--vcs none)。它会生成一个完整的项目结构,包括Cargo.toml文件、src/main.rs文件(对于二进制项目)或src/lib.rs文件(对于库项目)。
  • cargo init: 在当前目录中初始化一个新的 Rust 项目。它不会创建新的目录,而是在当前目录中生成Cargo.toml文件和src/目录。它不会初始化 Git 仓库,除非当前目录已经是 Git 仓库。
  • 目录结构:

    • cargo new: 创建一个新的目录,并在其中初始化项目。
    • cargo init: 在当前目录中初始化项目,不会创建新的目录。
  • Git 仓库:

    • cargo new: 默认情况下会初始化一个新的 Git 仓库,并创建.gitignore文件。
    • cargo init: 不会初始化 Git 仓库,除非当前目录已经是 Git 仓库。
  • 适用场景:

    • cargo new: 适用于从头开始创建一个新的 Rust 项目,并希望项目结构清晰、独立。
    • cargo init: 适用于在已有目录中初始化 Rust 项目,例如在已有代码库中添加 Rust 支持。

    适用场景

    • cargo new:

      • 从头开始创建新项目: 当你想要从头开始创建一个新的 Rust 项目时,cargo new是最合适的选择。它会为你创建一个全新的目录,并初始化项目结构。
      • 独立项目: 如果你希望项目结构独立于其他代码,cargo new会自动创建一个独立的目录,适合独立开发和维护。
    • cargo init:

      • 已有目录中初始化项目: 当你已经在某个目录中开始编写代码,但希望将其转换为 Rust 项目时,cargo init是最合适的选择。它不会创建新的目录,而是在当前目录中初始化项目。
      • 混合语言项目: 如果你在一个混合语言的项目中(例如既有 Rust 又有其他语言的代码),cargo init可以帮助你在已有目录中添加 Rust 支持。

    完整实例代码

    使用cargo new创建新项目

    cargo new my_project
    cd my_project

    生成的目录结构:

    my_project/
    ├── Cargo.toml
    └── src
    └── main.rs

    Cargo.toml内容:

    [package]
    name = "my_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]

    src/main.rs内容:

    fn main() {
        println!("Hello, world!");
    }

    使用cargo init在当前目录中初始化项目

    假设你已经在my_existing_project目录中开始编写代码:

    cd my_existing_project
    cargo init

    生成的目录结构:

    my_existing_project/
    ├── Cargo.toml
    └── src
    └── main.rs

    Cargo.toml内容:

    [package]
    name = "my_existing_project"
    version = "0.1.0"
    edition = "2021"

    [dependencies]

    src/main.rs内容:

    fn main() {
        println!("Hello, world!");
    }

    总结

    • cargo new: 适用于从头开始创建一个新的 Rust 项目,并希望项目结构清晰、独立。
    • cargo init: 适用于在已有目录中初始化 Rust 项目,例如在已有代码库中添加 Rust 支持。

    通过本文的详细解析和实例代码,你应该能够清晰地理解cargo newcargo init的异同点,并根据不同的场景选择合适的命令来初始化 Rust 项目,从而提高开发效率和代码组织性。

    参考资料

    [1]

    crates.io:https://crates.io/


    无论身在何处

    有我不再孤单孤单

    长按识别二维码关注我们




    育儿之家 YEZJ
    “Rust编程之道”,带你探索Rust语言之美,精进编程技艺,开启无限可能!🦀🦀🦀
     最新文章