diff --git a/src/bin/cargo/commands/install.rs b/src/bin/cargo/commands/install.rs index b26c0cc6d4a..88c75fbc52c 100644 --- a/src/bin/cargo/commands/install.rs +++ b/src/bin/cargo/commands/install.rs @@ -57,6 +57,7 @@ pub fn cli() -> App { "Install all examples", ) .arg_target_triple("Build for the target triple") + .arg_target_dir() .arg(opt("root", "Directory to install packages into").value_name("DIR")) .arg( opt("index", "Registry index to install from") diff --git a/src/doc/man/cargo-install.adoc b/src/doc/man/cargo-install.adoc index 4c33e264b5e..6c96fdcf91f 100644 --- a/src/doc/man/cargo-install.adoc +++ b/src/doc/man/cargo-install.adoc @@ -143,6 +143,8 @@ include::options-features.adoc[] include::options-target-triple.adoc[] +include::options-target-dir.adoc[] + *--debug*:: Build with the `dev` profile instead the `release` profile. diff --git a/src/doc/man/generated/cargo-install.html b/src/doc/man/generated/cargo-install.html index 0dee05d2a41..8f143f04690 100644 --- a/src/doc/man/generated/cargo-install.html +++ b/src/doc/man/generated/cargo-install.html @@ -258,6 +258,13 @@

Compilation Options

build cache documentation for more details.

+
--target-dir DIRECTORY
+
+

Directory for all generated artifacts and intermediate files. May also be +specified with the CARGO_TARGET_DIR environment variable, or the +build.target-dir config value. Defaults +to target in the root of the workspace.

+
--debug

Build with the dev profile instead the release profile.

diff --git a/src/etc/man/cargo-install.1 b/src/etc/man/cargo-install.1 index 8ad897030a8..74751ec32e5 100644 --- a/src/etc/man/cargo-install.1 +++ b/src/etc/man/cargo-install.1 @@ -2,12 +2,12 @@ .\" Title: cargo-install .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.10 -.\" Date: 2020-06-14 +.\" Date: 2020-06-20 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "CARGO\-INSTALL" "1" "2020-06-14" "\ \&" "\ \&" +.TH "CARGO\-INSTALL" "1" "2020-06-20" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 @@ -345,6 +345,16 @@ target artifacts are placed in a separate directory. See the documentation for more details. .RE .sp +\fB\-\-target\-dir\fP \fIDIRECTORY\fP +.RS 4 +Directory for all generated artifacts and intermediate files. May also be +specified with the \fBCARGO_TARGET_DIR\fP environment variable, or the +\fBbuild.target\-dir\fP \c +.URL "https://doc.rust\-lang.org/cargo/reference/config.html" "config value" "." +Defaults +to \fBtarget\fP in the root of the workspace. +.RE +.sp \fB\-\-debug\fP .RS 4 Build with the \fBdev\fP profile instead the \fBrelease\fP profile. diff --git a/tests/testsuite/install.rs b/tests/testsuite/install.rs index 842844819fa..9c5a1e72651 100644 --- a/tests/testsuite/install.rs +++ b/tests/testsuite/install.rs @@ -308,6 +308,35 @@ fn install_path() { .run(); } +#[cargo_test] +fn install_target_dir() { + let p = project().file("src/main.rs", "fn main() {}").build(); + + p.cargo("install --target-dir td_test") + .with_stderr( + "\ +[WARNING] Using `cargo install` [..] +[INSTALLING] foo v0.0.1 [..] +[COMPILING] foo v0.0.1 [..] +[FINISHED] release [..] +[INSTALLING] [..]foo[EXE] +[INSTALLED] package `foo v0.0.1 [..]foo[..]` (executable `foo[EXE]`) +[WARNING] be sure to add [..] +", + ) + .run(); + + let mut path = p.root(); + path.push("td_test"); + assert!(path.exists()); + + #[cfg(not(windows))] + path.push("release/foo"); + #[cfg(windows)] + path.push("release/foo.exe"); + assert!(path.exists()); +} + #[cargo_test] fn multiple_crates_error() { let p = git::repo(&paths::root().join("foo"))