Skip to content

Commit 4d4eb10

Browse files
committed
auto merge of #16186 : steveklabnik/rust/guide_cargo_new, r=alexcrichton
Two commits here: one to add `cargo new` to the guide, and a second to mention the lockfile that Cargo now generates.
2 parents 756b7b2 + 2b9c5d2 commit 4d4eb10

File tree

1 file changed

+30
-53
lines changed

1 file changed

+30
-53
lines changed

src/doc/guide.md

+30-53
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ Put this inside:
316316
317317
name = "hello_world"
318318
version = "0.1.0"
319-
authors = [ "someone@example.com" ]
319+
authors = [ "Your name <you@example.com>" ]
320320
321321
[[bin]]
322322
@@ -354,6 +354,18 @@ file, we would need to call `rustc` twice, and pass it a bunch of options to
354354
tell it to build everything together. With Cargo, as our project grows, we can
355355
just `cargo build` and it'll work the right way.
356356

357+
You'll also notice that Cargo has created a new file: `Cargo.lock`.
358+
359+
```{ignore,notrust}
360+
[root]
361+
name = "hello_world"
362+
version = "0.0.1"
363+
```
364+
365+
This file is used by Cargo to keep track of dependencies in your application.
366+
Right now, we don't have any, so it's a bit sparse. You won't ever need
367+
to touch this file yourself, just let Cargo handle it.
368+
357369
That's it! We've successfully built `hello_world` with Cargo. Even though our
358370
program is simple, it's using much of the real tooling that you'll use for the
359371
rest of your Rust career.
@@ -1594,41 +1606,45 @@ taken to the screen. Sound good?
15941606

15951607
## Set up
15961608

1597-
Let's set up a new project. Go to your projects directory, and make a new
1598-
directory for the project, as well as a `src` directory for our code:
1609+
Let's set up a new project. Go to your projects directory. Remember how we
1610+
had to create our directory structure and a `Cargo.toml` for `hello_world`? Cargo
1611+
has a command that does that for us. Let's give it a shot:
15991612

16001613
```{bash}
16011614
$ cd ~/projects
1602-
$ mkdir guessing_game
1615+
$ cargo new guessing_game --bin
16031616
$ cd guessing_game
1604-
$ mkdir src
16051617
```
16061618

1607-
Great. Next, let's make a `Cargo.toml` file so Cargo knows how to build our
1608-
project:
1619+
We pass the name of our project to `cargo new`, and then the `--bin` flag,
1620+
since we're making a binary, rather than a library.
1621+
1622+
Check out the generated `Cargo.toml`:
16091623

16101624
```{ignore}
16111625
[package]
16121626
16131627
name = "guessing_game"
16141628
version = "0.1.0"
1615-
authors = [ "someone@example.com" ]
1629+
authors = ["Your Name <you@example.com>"]
16161630
16171631
[[bin]]
16181632
16191633
name = "guessing_game"
16201634
```
16211635

1622-
Finally, we need our source file. Let's just make it hello world for now, so we
1623-
can check that our setup works. In `src/guessing_game.rs`:
1636+
Cargo gets this information from your environment. If it's not correct, go ahead
1637+
and fix that.
1638+
1639+
Finally, Cargo generated a hello, world for us. Check out `src/main.rs`:
16241640

16251641
```{rust}
16261642
fn main() {
16271643
println!("Hello world!");
16281644
}
16291645
```
16301646

1631-
Let's make sure that worked:
1647+
Let's try compiling what Cargo gave us:
16321648

16331649
```{bash}
16341650
$ cargo build
@@ -1883,7 +1899,6 @@ fn cmp(a: int, b: int) -> Ordering {
18831899
If we try to compile, we'll get some errors:
18841900

18851901
```{notrust,ignore}
1886-
$ cargo build
18871902
$ cargo build
18881903
Compiling guessing_game v0.1.0 (file:/home/you/projects/guessing_game)
18891904
src/guessing_game.rs:20:15: 20:20 error: mismatched types: expected `int` but found `collections::string::String` (expected int but found struct collections::string::String)
@@ -2486,27 +2501,7 @@ Enough talk, let's build something! Let's make a new project called `modules`.
24862501

24872502
```{bash,ignore}
24882503
$ cd ~/projects
2489-
$ mkdir modules
2490-
$ cd modules
2491-
$ mkdir src
2492-
```
2493-
2494-
We need to make our two 'hello world' files. In `src/main.rs`:
2495-
2496-
```{rust}
2497-
fn main() {
2498-
println!("Hello, world!");
2499-
}
2500-
```
2501-
2502-
And in `Cargo.toml`:
2503-
2504-
```{notrust,ignore}
2505-
[package]
2506-
2507-
name = "modules"
2508-
version = "0.1.0"
2509-
authors = [ "someone@example.com" ]
2504+
$ cargo new modules --bin
25102505
```
25112506

25122507
Let's double check our work by compiling:
@@ -2924,34 +2919,16 @@ now: make a new project:
29242919

29252920
```{bash,ignore}
29262921
$ cd ~/projects
2927-
$ mkdir testing
2922+
$ cargo new testing --bin
29282923
$ cd testing
2929-
$ mkdir test
2930-
```
2931-
2932-
In `src/main.rs`:
2933-
2934-
```{rust}
2935-
fn main() {
2936-
println!("Hello, world!");
2937-
}
2938-
```
2939-
2940-
And in `Cargo.toml`:
2941-
2942-
```{notrust,ignore}
2943-
[package]
2944-
2945-
name = "testing"
2946-
version = "0.1.0"
2947-
authors = [ "someone@example.com" ]
29482924
```
29492925

29502926
And try it out:
29512927

29522928
```{notrust,ignore}
29532929
$ cargo run
29542930
Compiling testing v0.1.0 (file:/home/you/projects/testing)
2931+
Running `target/testing`
29552932
Hello, world!
29562933
$
29572934
```

0 commit comments

Comments
 (0)