VS: Add support for generator expressions to VS_CONFIGURATION_TYPE

Generator expressions in target property VS_CONFIGURATION_TYPE might be used to
set the ConfigurationType to Utility for certain configurations to not build
the target while still linking to the target in other configurations.

Fixes: #19613
This commit is contained in:
Daniel Eiband 2019-08-26 15:22:43 +02:00
parent 0d356e4c94
commit 8909a450a6
5 changed files with 13 additions and 3 deletions

View File

@ -4,6 +4,8 @@ VS_CONFIGURATION_TYPE
Visual Studio project configuration type. Visual Studio project configuration type.
Sets the ``ConfigurationType`` attribute for a generated Visual Studio project. Sets the ``ConfigurationType`` attribute for a generated Visual Studio project.
The property value may use
:manual:`generator expressions <cmake-generator-expressions(7)>`.
If this property is set, it overrides the default setting that is based on the If this property is set, it overrides the default setting that is based on the
target type (e.g. ``StaticLibrary``, ``Application``, ...). target type (e.g. ``StaticLibrary``, ``Application``, ...).

View File

@ -0,0 +1,5 @@
vs-configuration-type-genex
---------------------------
* :prop_tgt:`VS_CONFIGURATION_TYPE` now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.

View File

@ -1115,7 +1115,10 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues(Elem& e0)
std::string configType; std::string configType;
if (const char* vsConfigurationType = if (const char* vsConfigurationType =
this->GeneratorTarget->GetProperty("VS_CONFIGURATION_TYPE")) { this->GeneratorTarget->GetProperty("VS_CONFIGURATION_TYPE")) {
configType = vsConfigurationType; cmGeneratorExpression ge;
std::unique_ptr<cmCompiledGeneratorExpression> cge =
ge.Parse(vsConfigurationType);
configType = cge->Evaluate(this->LocalGenerator, c);
} else { } else {
switch (this->GeneratorTarget->GetType()) { switch (this->GeneratorTarget->GetType()) {
case cmStateEnums::SHARED_LIBRARY: case cmStateEnums::SHARED_LIBRARY:

View File

@ -9,7 +9,7 @@ file(STRINGS "${vcProjectFile}" lines)
foreach(line IN LISTS lines) foreach(line IN LISTS lines)
if(line MATCHES "^ *<ConfigurationType>(.*)</ConfigurationType>$") if(line MATCHES "^ *<ConfigurationType>(.*)</ConfigurationType>$")
set(propertyFound TRUE) set(propertyFound TRUE)
set(expectedValue "MyValue") set(expectedValue "MyValue foo")
set(actualValue ${CMAKE_MATCH_1}) set(actualValue ${CMAKE_MATCH_1})
if(NOT (${actualValue} STREQUAL ${expectedValue})) if(NOT (${actualValue} STREQUAL ${expectedValue}))
set(RunCMake_TEST_FAILED "ConfigurationType \"${actualValue}\" differs from expected value \"${expectedValue}\".") set(RunCMake_TEST_FAILED "ConfigurationType \"${actualValue}\" differs from expected value \"${expectedValue}\".")

View File

@ -1,3 +1,3 @@
enable_language(CXX) enable_language(CXX)
add_library(foo foo.cpp) add_library(foo foo.cpp)
set_target_properties(foo PROPERTIES VS_CONFIGURATION_TYPE "MyValue") set_target_properties(foo PROPERTIES VS_CONFIGURATION_TYPE "MyValue $<TARGET_PROPERTY:foo,NAME>")