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(
|
||||
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();
|
||||
if (useFolderProperty)
|
||||
{
|
||||
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
|
||||
fout << "Global\n";
|
||||
// Write out the configurations for the solution
|
||||
|
|
|
@ -234,7 +234,10 @@ endif()
|
|||
|
||||
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
|
||||
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()
|
||||
|
||||
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^789]|[789][0-9])")
|
||||
|
|
|
@ -10,3 +10,7 @@ run_cmake(Override1)
|
|||
run_cmake(Override2)
|
||||
run_cmake(StartupProject)
|
||||
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