VS: Fix default target support for targets nested inside a folder
It's not actually the first target in a `.sln` file that is treated as the default startup project, but rather the first fully defined target.
This commit is contained in:
parent
c05ea48545
commit
f069be0548
|
@ -97,14 +97,31 @@ void cmGlobalVisualStudio71Generator
|
||||||
OrderedTargetDependSet orderedProjectTargets(
|
OrderedTargetDependSet orderedProjectTargets(
|
||||||
projectTargets, this->GetStartupProjectName(root));
|
projectTargets, this->GetStartupProjectName(root));
|
||||||
|
|
||||||
this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
|
// Generate the targets specification to a string. We will put this in
|
||||||
|
// the actual .sln file later. As a side effect, this method also
|
||||||
|
// populates the set of folders.
|
||||||
|
std::ostringstream targetsSlnString;
|
||||||
|
this->WriteTargetsToSolution(targetsSlnString, root, orderedProjectTargets);
|
||||||
|
|
||||||
|
// VS 7 does not support folders specified first.
|
||||||
|
if (this->GetVersion() <= VS71)
|
||||||
|
{
|
||||||
|
fout << targetsSlnString.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate folder specification.
|
||||||
bool useFolderProperty = this->UseFolderProperty();
|
bool useFolderProperty = this->UseFolderProperty();
|
||||||
if (useFolderProperty)
|
if (useFolderProperty)
|
||||||
{
|
{
|
||||||
this->WriteFolders(fout);
|
this->WriteFolders(fout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Now write the actual target specification content.
|
||||||
|
if (this->GetVersion() > VS71)
|
||||||
|
{
|
||||||
|
fout << targetsSlnString.str();
|
||||||
|
}
|
||||||
|
|
||||||
// Write out the configurations information for the solution
|
// Write out the configurations information for the solution
|
||||||
fout << "Global\n";
|
fout << "Global\n";
|
||||||
// Write out the configurations for the solution
|
// Write out the configurations for the solution
|
||||||
|
|
|
@ -234,7 +234,10 @@ endif()
|
||||||
|
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
|
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
|
||||||
add_RunCMake_test(include_external_msproject)
|
add_RunCMake_test(include_external_msproject)
|
||||||
add_RunCMake_test(VSSolution)
|
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([789]|10)" AND NOT CMAKE_VS_DEVENV_COMMAND)
|
||||||
|
set(NO_USE_FOLDERS 1)
|
||||||
|
endif()
|
||||||
|
add_RunCMake_test(VSSolution -DNO_USE_FOLDERS=${NO_USE_FOLDERS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^789]|[789][0-9])")
|
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^789]|[789][0-9])")
|
||||||
|
|
|
@ -10,3 +10,7 @@ run_cmake(Override1)
|
||||||
run_cmake(Override2)
|
run_cmake(Override2)
|
||||||
run_cmake(StartupProject)
|
run_cmake(StartupProject)
|
||||||
run_cmake(StartupProjectMissing)
|
run_cmake(StartupProjectMissing)
|
||||||
|
|
||||||
|
if(RunCMake_GENERATOR MATCHES "Visual Studio ([^7]|[7][0-9])" AND NOT NO_USE_FOLDERS)
|
||||||
|
run_cmake(StartupProjectUseFolders)
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
getProjectNames(projects)
|
||||||
|
list(GET projects 0 first_project)
|
||||||
|
if(NOT first_project STREQUAL "CMakePredefinedTargets")
|
||||||
|
error("CMakePredefinedTargets is not the first project")
|
||||||
|
endif()
|
||||||
|
list(GET projects 1 second_project)
|
||||||
|
if(NOT second_project STREQUAL "TestStartup")
|
||||||
|
error("TestStartup does not immediately follow the CMakePredefinedTargets project")
|
||||||
|
endif()
|
|
@ -0,0 +1,3 @@
|
||||||
|
add_custom_target(TestStartup)
|
||||||
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT "TestStartup")
|
Loading…
Reference in New Issue