Improve the error message when a target is specified but not found.

https://github.com/flutter/flutter/issues/2368
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index d43f121..c916ca6 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -21,7 +21,7 @@
   FlutterCommandRunner get runner => super.runner;
 
   /// Whether this command needs to be run from the root of a project.
-  bool get requiresProjectRoot => !_targetSpecified;
+  bool get requiresProjectRoot => true;
 
   /// Whether this command requires a (single) Flutter target device to be connected.
   bool get requiresDevice => false;
@@ -29,6 +29,10 @@
   /// Whether this command only applies to Android devices.
   bool get androidOnly => false;
 
+  /// Whether this command allows usage of the 'target' option.
+  bool get allowsTarget => _targetOptionSpecified;
+  bool _targetOptionSpecified = false;
+
   List<BuildConfiguration> get buildConfigurations => runner.buildConfigurations;
 
   Future downloadToolchain() async {
@@ -59,7 +63,8 @@
   }
 
   Future<int> _run() async {
-    if (requiresProjectRoot && !projectRootValidator())
+    bool _checkRoot = requiresProjectRoot && allowsTarget && !_targetSpecified;
+    if (_checkRoot && !projectRootValidator())
       return 1;
 
     // Ensure at least one toolchain is installed.
@@ -152,5 +157,6 @@
       callback: (val) => _targetSpecified = true,
       defaultsTo: flx.defaultMainPath,
       help: 'Target app path / main entry-point file.');
+    _targetOptionSpecified = true;
   }
 }