From 1b9e61f214b12f9a20a975d9bfe9c310d65082d2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 1 Oct 2009 10:27:02 -0400 Subject: Add alternative _UTILITY targets to all solutions In VS 6, 7, and 7.1 solutions we implement add_dependencies(myexe mylib) # depend without linking by creating an intermediate mylib_UTILITY target with dependencies myexe -> mylib_UTILITY -> mylib to avoid linking myexe to mylib. Previously these extra targets were only added to the solution files in an ancestor directory of that defining mylib. For example, in the project: # CMakeLists.txt project(TOP) add_subdirectory(A) add_subdirectory(b) # A/CMakeLists.txt add_library(mylib ...) # B/CMakeLists.txt project(B) add_executable(myexe ...) add_dependencies(myexe mylib) the solution for TOP would have mylib_UTILITY but the solution for B would not even though it pulls in mylib through the dependency. This commit fixes solutions generated in other directories so that any solution that has mylib will get mylib_UTILITY also. See issue #9568. --- Source/cmGlobalVisualStudioGenerator.cxx | 24 ++++++++++++++++++++++++ Source/cmGlobalVisualStudioGenerator.h | 3 +++ 2 files changed, 27 insertions(+) diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx index bc67151..85b4a71 100644 --- a/Source/cmGlobalVisualStudioGenerator.cxx +++ b/Source/cmGlobalVisualStudioGenerator.cxx @@ -409,6 +409,30 @@ cmGlobalVisualStudioGenerator::GetUtilityForTarget(cmTarget& target, } //---------------------------------------------------------------------------- +void cmGlobalVisualStudioGenerator::GetTargetSets( + TargetDependSet& projectTargets, TargetDependSet& originalTargets, + cmLocalGenerator* root, GeneratorVector const& generators + ) +{ + this->cmGlobalGenerator::GetTargetSets(projectTargets, originalTargets, + root, generators); + + // Add alternative dependency targets created by FixUtilityDepends. + for(TargetDependSet::iterator ti = projectTargets.begin(); + ti != projectTargets.end(); ++ti) + { + cmTarget* tgt = *ti; + if(const char* altName = tgt->GetProperty("ALTERNATIVE_DEPENDENCY_NAME")) + { + if(cmTarget* alt = tgt->GetMakefile()->FindTarget(altName)) + { + projectTargets.insert(alt); + } + } + } +} + +//---------------------------------------------------------------------------- #include //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalVisualStudioGenerator.h b/Source/cmGlobalVisualStudioGenerator.h index c601cc4..d799485 100644 --- a/Source/cmGlobalVisualStudioGenerator.h +++ b/Source/cmGlobalVisualStudioGenerator.h @@ -85,6 +85,9 @@ protected: OrderedTargetDependSet(cmGlobalGenerator::TargetDependSet const&); }; + virtual void GetTargetSets(TargetDependSet& projectTargets, + TargetDependSet& originalTargets, + cmLocalGenerator* root, GeneratorVector const&); private: void FixUtilityDependsForTarget(cmTarget& target); void CreateUtilityDependTarget(cmTarget& target); -- cgit v0.12