VS: Add option to set `ConfigurationType` of a .vcxproj file
Add a VS_CONFIGURATION_TYPE target property to set this value explicitly. This is useful to build a Windows Kernel Mode Driver, for example.
This commit is contained in:
parent
6b0a664c16
commit
6122909c33
|
@ -255,6 +255,7 @@ Properties on Targets
|
|||
/prop_tgt/TYPE
|
||||
/prop_tgt/VERSION
|
||||
/prop_tgt/VISIBILITY_INLINES_HIDDEN
|
||||
/prop_tgt/VS_CONFIGURATION_TYPE
|
||||
/prop_tgt/VS_DESKTOP_EXTENSIONS_VERSION
|
||||
/prop_tgt/VS_DOTNET_REFERENCES
|
||||
/prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
VS_CONFIGURATION_TYPE
|
||||
---------------------
|
||||
|
||||
Visual Studio project configuration type.
|
||||
|
||||
Sets the ``ConfigurationType`` attribute for a generated Visual Studio project.
|
||||
If this property is set, it overrides the default setting that is based on the
|
||||
target type (e.g. ``StaticLibrary``, ``Application``, ...).
|
||||
|
||||
Supported on :ref:`Visual Studio Generators` for VS 2010 and higher.
|
|
@ -0,0 +1,6 @@
|
|||
vs-vcxproj-ConfigurationType
|
||||
----------------------------
|
||||
|
||||
* :ref:`Visual Studio Generators` for VS 2010 and above learned a new
|
||||
:prop_tgt:`VS_CONFIGURATION_TYPE` target property to specify a custom
|
||||
project file type.
|
|
@ -696,43 +696,51 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
|
|||
i->c_str(),
|
||||
1, " Label=\"Configuration\"", "\n");
|
||||
std::string configType = "<ConfigurationType>";
|
||||
switch(this->GeneratorTarget->GetType())
|
||||
if (const char* vsConfigurationType =
|
||||
this->GeneratorTarget->GetProperty("VS_CONFIGURATION_TYPE"))
|
||||
{
|
||||
case cmState::SHARED_LIBRARY:
|
||||
case cmState::MODULE_LIBRARY:
|
||||
configType += "DynamicLibrary";
|
||||
break;
|
||||
case cmState::OBJECT_LIBRARY:
|
||||
case cmState::STATIC_LIBRARY:
|
||||
configType += "StaticLibrary";
|
||||
break;
|
||||
case cmState::EXECUTABLE:
|
||||
if(this->NsightTegra &&
|
||||
!this->GeneratorTarget->GetPropertyAsBool("ANDROID_GUI"))
|
||||
{
|
||||
// Android executables are .so too.
|
||||
configType += cmVS10EscapeXML(vsConfigurationType);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(this->GeneratorTarget->GetType())
|
||||
{
|
||||
case cmState::SHARED_LIBRARY:
|
||||
case cmState::MODULE_LIBRARY:
|
||||
configType += "DynamicLibrary";
|
||||
}
|
||||
else
|
||||
{
|
||||
configType += "Application";
|
||||
}
|
||||
break;
|
||||
case cmState::UTILITY:
|
||||
case cmState::GLOBAL_TARGET:
|
||||
if(this->NsightTegra)
|
||||
{
|
||||
// Tegra-Android platform does not understand "Utility".
|
||||
break;
|
||||
case cmState::OBJECT_LIBRARY:
|
||||
case cmState::STATIC_LIBRARY:
|
||||
configType += "StaticLibrary";
|
||||
}
|
||||
else
|
||||
{
|
||||
configType += "Utility";
|
||||
}
|
||||
break;
|
||||
case cmState::UNKNOWN_LIBRARY:
|
||||
case cmState::INTERFACE_LIBRARY:
|
||||
break;
|
||||
break;
|
||||
case cmState::EXECUTABLE:
|
||||
if(this->NsightTegra &&
|
||||
!this->GeneratorTarget->GetPropertyAsBool("ANDROID_GUI"))
|
||||
{
|
||||
// Android executables are .so too.
|
||||
configType += "DynamicLibrary";
|
||||
}
|
||||
else
|
||||
{
|
||||
configType += "Application";
|
||||
}
|
||||
break;
|
||||
case cmState::UTILITY:
|
||||
case cmState::GLOBAL_TARGET:
|
||||
if(this->NsightTegra)
|
||||
{
|
||||
// Tegra-Android platform does not understand "Utility".
|
||||
configType += "StaticLibrary";
|
||||
}
|
||||
else
|
||||
{
|
||||
configType += "Utility";
|
||||
}
|
||||
break;
|
||||
case cmState::UNKNOWN_LIBRARY:
|
||||
case cmState::INTERFACE_LIBRARY:
|
||||
break;
|
||||
}
|
||||
}
|
||||
configType += "</ConfigurationType>\n";
|
||||
this->WriteString(configType.c_str(), 2);
|
||||
|
|
|
@ -236,6 +236,10 @@ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio [^6]")
|
|||
add_RunCMake_test(SolutionGlobalSections)
|
||||
endif()
|
||||
|
||||
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^6789]|[6789][0-9])")
|
||||
add_RunCMake_test(VS10Project)
|
||||
endif()
|
||||
|
||||
if(XCODE_VERSION AND NOT "${XCODE_VERSION}" VERSION_LESS 3)
|
||||
add_RunCMake_test(XcodeProject -DXCODE_VERSION=${XCODE_VERSION})
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
cmake_minimum_required(VERSION 3.5.0)
|
||||
project(${RunCMake_TEST} NONE)
|
||||
include(${RunCMake_TEST}.cmake)
|
|
@ -0,0 +1,2 @@
|
|||
include(RunCMake)
|
||||
run_cmake(VsConfigurationType)
|
|
@ -0,0 +1,24 @@
|
|||
set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj")
|
||||
if(NOT EXISTS "${vcProjectFile}")
|
||||
set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(propertyFound FALSE)
|
||||
file(STRINGS "${vcProjectFile}" lines)
|
||||
foreach(line IN LISTS lines)
|
||||
if(line MATCHES "^ *<ConfigurationType>(.*)</ConfigurationType>$")
|
||||
set(propertyFound TRUE)
|
||||
set(expectedValue "MyValue")
|
||||
set(actualValue ${CMAKE_MATCH_1})
|
||||
if(NOT (${actualValue} STREQUAL ${expectedValue}))
|
||||
set(RunCMake_TEST_FAILED "ConfigurationType \"${actualValue}\" differs from expected value \"${expectedValue}\".")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT propertyFound)
|
||||
set(RunCMake_TEST_FAILED "Property ConfigurationType not found in project file.")
|
||||
return()
|
||||
endif()
|
|
@ -0,0 +1,3 @@
|
|||
enable_language(CXX)
|
||||
add_library(foo foo.cpp)
|
||||
set_target_properties(foo PROPERTIES VS_CONFIGURATION_TYPE "MyValue")
|
|
@ -0,0 +1 @@
|
|||
void foo() { }
|
Loading…
Reference in New Issue