From 497cad7c883dc401b4d78109c3a057fb38745d9e Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Thu, 4 Feb 2016 12:36:44 +0100 Subject: cmake: Teach --build to reject multiple --target options Previously we did not clearly document that `--target` is only supported to be specified once. Even worse, specifying it multiple times would silently ignore any previously specified targets and only build the last target. Update the documentation to specify this. Update the implementation to reject multiple `--target` options to prevent user errors. --- Source/cmakemain.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'Source/cmakemain.cxx') diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index a06b26fc69..c60b962ce3 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -60,6 +60,7 @@ static const char * cmDocumentationUsageNote[][2] = #define CMAKE_BUILD_OPTIONS \ " = Project binary directory to be built.\n" \ " --target = Build instead of default targets.\n" \ + " May only be specified once.\n" \ " --config = For multi-configuration tools, choose .\n" \ " --clean-first = Build target 'clean' first, then build.\n" \ " (To clean only, use --target 'clean'.)\n" \ @@ -386,6 +387,7 @@ static int do_build(int ac, char const* const* av) std::string dir; std::vector nativeOptions; bool clean = false; + bool hasTarget = false; enum Doing { DoingNone, DoingDir, DoingTarget, DoingConfig, DoingNative}; Doing doing = DoingDir; @@ -397,7 +399,17 @@ static int do_build(int ac, char const* const* av) } else if(strcmp(av[i], "--target") == 0) { - doing = DoingTarget; + if (!hasTarget) + { + doing = DoingTarget; + hasTarget = true; + } + else + { + std::cerr << "'--target' may not be specified more than once.\n\n"; + dir = ""; + break; + } } else if(strcmp(av[i], "--config") == 0) { -- cgit v1.2.1