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"))