mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 21:00:17 -06:00
cmake: Allow arbitrary args passed to CMake script
This commit is contained in:
@@ -481,13 +481,17 @@ Run a Script
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
cmake [{-D <var>=<value>}...] -P <cmake-script-file>
|
||||
cmake [{-D <var>=<value>}...] -P <cmake-script-file> [-- <unparsed-options>...]
|
||||
|
||||
Process the given cmake file as a script written in the CMake
|
||||
language. No configure or generate step is performed and the cache
|
||||
is not modified. If variables are defined using ``-D``, this must be
|
||||
done before the ``-P`` argument.
|
||||
|
||||
Any options after ``--`` are not parsed by CMake, but they are still included
|
||||
in the set of :variable:`CMAKE_ARGV<n> <CMAKE_ARGV0>` variables passed to the
|
||||
script (including the ``--`` itself).
|
||||
|
||||
|
||||
Run a Command-Line Tool
|
||||
=======================
|
||||
|
||||
@@ -289,7 +289,8 @@ void cmake::CleanupCommandsAndMacros()
|
||||
// Parse the args
|
||||
bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
{
|
||||
bool findPackageMode = false;
|
||||
auto findPackageMode = false;
|
||||
auto seenScriptOption = false;
|
||||
for (unsigned int i = 1; i < args.size(); ++i) {
|
||||
std::string const& arg = args[i];
|
||||
if (cmHasLiteralPrefix(arg, "-D")) {
|
||||
@@ -444,6 +445,11 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
this->SetHomeOutputDirectory(
|
||||
cmSystemTools::GetCurrentWorkingDirectory());
|
||||
this->ReadListFile(args, path);
|
||||
seenScriptOption = true;
|
||||
} else if (arg == "--" && seenScriptOption) {
|
||||
// Stop processing CMake args and avoid possible errors
|
||||
// when arbitrary args are given to CMake script.
|
||||
break;
|
||||
} else if (cmHasLiteralPrefix(arg, "--find-package")) {
|
||||
findPackageMode = true;
|
||||
}
|
||||
|
||||
3
Tests/RunCMake/CommandLine/P_arbitrary_args.cmake
Normal file
3
Tests/RunCMake/CommandLine/P_arbitrary_args.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
if(NOT ("${CMAKE_ARGV3}" STREQUAL "--" AND "${CMAKE_ARGV4}" STREQUAL "-DFOO"))
|
||||
message(FATAL_ERROR "`-DFOO` shouldn't trigger an error after `--`")
|
||||
endif()
|
||||
@@ -46,6 +46,7 @@ run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G)
|
||||
run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator)
|
||||
run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P)
|
||||
run_cmake_command(P_no-file ${CMAKE_COMMAND} -P nosuchscriptfile.cmake)
|
||||
run_cmake_command(P_arbitrary_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -DFOO)
|
||||
|
||||
run_cmake_command(build-no-dir
|
||||
${CMAKE_COMMAND} --build)
|
||||
|
||||
Reference in New Issue
Block a user