mirror of
https://github.com/reactos/CMake.git
synced 2024-11-25 20:49:41 +00:00
cmake: Add -A option to specify a generator platform
Define the 'cmake -A' option to set CMAKE_GENERATOR_PLATFORM without having to spell out the whole variable name. We choose the name '-A' for "platform" because '-P' is already taken, and in the common use case the "platform" is actually an architecture (e.g. x64). Teach the RunCMake test infrastructure to use -A to pass the generator platform. Extend the RunCMake.GeneratorPlatform test with a case to verify that the -A option cannot be repeated.
This commit is contained in:
parent
09c8ad9943
commit
eb7d815649
@ -51,6 +51,17 @@
|
||||
|
||||
See native build system documentation for allowed toolset names.
|
||||
|
||||
``-A <platform-name>``
|
||||
Specify platform name if supported by generator.
|
||||
|
||||
Some CMake generators support a platform name to be given to the
|
||||
native build system to choose a compiler or SDK. This is supported only on
|
||||
specific generators::
|
||||
|
||||
Visual Studio >= 8
|
||||
|
||||
See native build system documentation for allowed platform names.
|
||||
|
||||
``-Wno-dev``
|
||||
Suppress developer warnings.
|
||||
|
||||
|
@ -4,4 +4,6 @@ vs-generator-platform
|
||||
* The Visual Studio generators for versions 8 (2005) and above
|
||||
learned to read the target platform name from a new
|
||||
:variable:`CMAKE_GENERATOR_PLATFORM` variable when it is
|
||||
not specified as part of the generator name.
|
||||
not specified as part of the generator name. The platform
|
||||
name may be specified on the :manual:`cmake(1)` command line
|
||||
with the ``-A`` option, e.g. ``-G "Visual Studio 12 2013" -A x64``.
|
||||
|
@ -5,6 +5,8 @@ Generator-specific target platform name specified by user.
|
||||
|
||||
Some CMake generators support a target platform name to be given
|
||||
to the native build system to choose a compiler toolchain.
|
||||
If the user specifies a toolset name (e.g. via the cmake -A option)
|
||||
the value will be available in this variable.
|
||||
|
||||
The value of this variable should never be modified by project code.
|
||||
A toolchain file specified by the :variable:`CMAKE_TOOLCHAIN_FILE`
|
||||
|
@ -639,6 +639,7 @@ void cmake::SetArgs(const std::vector<std::string>& args,
|
||||
{
|
||||
bool directoriesSet = directoriesSetBefore;
|
||||
bool haveToolset = false;
|
||||
bool havePlatform = false;
|
||||
for(unsigned int i=1; i < args.size(); ++i)
|
||||
{
|
||||
std::string arg = args[i];
|
||||
@ -767,6 +768,27 @@ void cmake::SetArgs(const std::vector<std::string>& args,
|
||||
"uninitialized variables.\n";
|
||||
this->SetCheckSystemVars(true);
|
||||
}
|
||||
else if(arg.find("-A",0) == 0)
|
||||
{
|
||||
std::string value = arg.substr(2);
|
||||
if(value.size() == 0)
|
||||
{
|
||||
++i;
|
||||
if(i >= args.size())
|
||||
{
|
||||
cmSystemTools::Error("No platform specified for -A");
|
||||
return;
|
||||
}
|
||||
value = args[i];
|
||||
}
|
||||
if(havePlatform)
|
||||
{
|
||||
cmSystemTools::Error("Multiple -A options not allowed");
|
||||
return;
|
||||
}
|
||||
this->GeneratorPlatform = value;
|
||||
havePlatform = true;
|
||||
}
|
||||
else if(arg.find("-T",0) == 0)
|
||||
{
|
||||
std::string value = arg.substr(2);
|
||||
|
@ -476,6 +476,7 @@ private:
|
||||
{"-U <globbing_expr>", "Remove matching entries from CMake cache."}, \
|
||||
{"-G <generator-name>", "Specify a build system generator."},\
|
||||
{"-T <toolset-name>", "Specify toolset name if supported by generator."}, \
|
||||
{"-A <platform-name>", "Specify platform name if supported by generator."}, \
|
||||
{"-Wno-dev", "Suppress developer warnings."},\
|
||||
{"-Wdev", "Enable developer warnings."}
|
||||
|
||||
|
@ -10,3 +10,9 @@ else()
|
||||
set(RunCMake_GENERATOR_PLATFORM "Bad Platform")
|
||||
run_cmake(BadPlatform)
|
||||
endif()
|
||||
|
||||
set(RunCMake_GENERATOR_TOOLSET "")
|
||||
|
||||
set(RunCMake_TEST_OPTIONS -A "Extra Platform")
|
||||
run_cmake(TwoPlatforms)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms-result.txt
Normal file
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms-result.txt
Normal file
@ -0,0 +1 @@
|
||||
1
|
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms-stderr.txt
Normal file
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms-stderr.txt
Normal file
@ -0,0 +1 @@
|
||||
CMake Error: Multiple -A options not allowed
|
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms.cmake
Normal file
1
Tests/RunCMake/GeneratorPlatform/TwoPlatforms.cmake
Normal file
@ -0,0 +1 @@
|
||||
message(FATAL_ERROR "This should not be reached!")
|
@ -53,7 +53,7 @@ function(run_cmake test)
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}"
|
||||
-G "${RunCMake_GENERATOR}"
|
||||
"-DCMAKE_GENERATOR_PLATFORM=${RunCMake_GENERATOR_PLATFORM}"
|
||||
-A "${RunCMake_GENERATOR_PLATFORM}"
|
||||
-T "${RunCMake_GENERATOR_TOOLSET}"
|
||||
-DRunCMake_TEST=${test}
|
||||
--no-warn-unused-cli
|
||||
|
Loading…
Reference in New Issue
Block a user