mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-10 07:40:03 -06:00
committed by
Brad King
parent
7137dff083
commit
1b6c5333a0
@@ -846,6 +846,8 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
bool haveToolset = false;
|
||||
bool havePlatform = false;
|
||||
bool haveBArg = false;
|
||||
bool scriptMode = false;
|
||||
std::string possibleUnknownArg;
|
||||
#if !defined(CMAKE_BOOTSTRAP)
|
||||
std::string profilingFormat;
|
||||
std::string profilingOutput;
|
||||
@@ -898,7 +900,11 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
CommandArgument{ "-B", "No build directory specified for -B",
|
||||
CommandArgument::Values::One, BuildArgLambda },
|
||||
CommandArgument{ "-P", "-P must be followed by a file name.",
|
||||
CommandArgument::Values::One, IgnoreAndTrueLambda },
|
||||
CommandArgument::Values::One,
|
||||
[&](std::string const&, cmake*) -> bool {
|
||||
scriptMode = true;
|
||||
return true;
|
||||
} },
|
||||
CommandArgument{ "-D", "-D must be followed with VAR=VALUE.",
|
||||
CommandArgument::Values::One, IgnoreAndTrueLambda },
|
||||
CommandArgument{ "-C", "-C must be followed by a file name.",
|
||||
@@ -1145,14 +1151,28 @@ void cmake::SetArgs(const std::vector<std::string>& args)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// We have an issue where arguments to a "-P" script mode
|
||||
// can be provided before the "-P" argument. This means
|
||||
// that we need to lazily check this argument after checking
|
||||
// all args.
|
||||
// Additionally it can't be the source/binary tree location
|
||||
if (!parsedCorrectly) {
|
||||
cmSystemTools::Error("Run 'cmake --help' for all supported options.");
|
||||
exit(1);
|
||||
} else if (!matched && cmHasLiteralPrefix(arg, "-")) {
|
||||
possibleUnknownArg = arg;
|
||||
} else if (!matched) {
|
||||
this->SetDirectoriesFromFile(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (!possibleUnknownArg.empty() && !scriptMode) {
|
||||
cmSystemTools::Error(cmStrCat("Unknown argument ", possibleUnknownArg));
|
||||
cmSystemTools::Error("Run 'cmake --help' for all supported options.");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Empty instance, platform and toolset if only a generator is specified
|
||||
if (this->GlobalGenerator) {
|
||||
this->GeneratorInstance = "";
|
||||
|
||||
1
Tests/RunCMake/CommandLine/InvalidArg1-result.txt
Normal file
1
Tests/RunCMake/CommandLine/InvalidArg1-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
||||
2
Tests/RunCMake/CommandLine/InvalidArg1-stderr.txt
Normal file
2
Tests/RunCMake/CommandLine/InvalidArg1-stderr.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
^CMake Error: Unknown argument -invalid
|
||||
CMake Error: Run 'cmake --help' for all supported options.$
|
||||
1
Tests/RunCMake/CommandLine/InvalidArg2-result.txt
Normal file
1
Tests/RunCMake/CommandLine/InvalidArg2-result.txt
Normal file
@@ -0,0 +1 @@
|
||||
1
|
||||
2
Tests/RunCMake/CommandLine/InvalidArg2-stderr.txt
Normal file
2
Tests/RunCMake/CommandLine/InvalidArg2-stderr.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
^CMake Error: Unknown argument --invalid
|
||||
CMake Error: Run 'cmake --help' for all supported options.$
|
||||
@@ -3,6 +3,8 @@ cmake_minimum_required(VERSION 3.1)
|
||||
include(RunCMake)
|
||||
|
||||
run_cmake_command(NoArgs ${CMAKE_COMMAND})
|
||||
run_cmake_command(InvalidArg1 ${CMAKE_COMMAND} -invalid)
|
||||
run_cmake_command(InvalidArg2 ${CMAKE_COMMAND} --invalid)
|
||||
run_cmake_command(Wizard ${CMAKE_COMMAND} -i)
|
||||
run_cmake_command(C-no-arg ${CMAKE_COMMAND} -B DummyBuildDir -C)
|
||||
run_cmake_command(C-no-file ${CMAKE_COMMAND} -B DummyBuildDir -C nosuchcachefile.txt)
|
||||
|
||||
Reference in New Issue
Block a user