bc43b0f2a4
In VS 8 and greater this commit implements add_dependencies(myexe mylib) # depend without linking by adding the LinkLibraryDependencies="false" option to project files. Previously the above code would cause myexe to link to mylib in VS 8 and greater. This option prevents dependencies specified only in the solution from being linked. We already specify the real link library dependencies in the project files, and any project depending on this to link would not have worked in Makefile generators. We were already avoiding this problem in VS 7.1 and below by inserting intermediate mylib_UTILITY targets. It was more important for those versions because if a static library depended on another library the librarian would copy the dependees into the depender! This is no longer the case with VS 8 and above so we do not need that workaround. See issue #9732.
99 lines
3.1 KiB
C++
99 lines
3.1 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
|
|
|
|
Distributed under the OSI-approved BSD License (the "License");
|
|
see accompanying file Copyright.txt for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even the
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
See the License for more information.
|
|
============================================================================*/
|
|
#ifndef cmGlobalVisualStudioGenerator_h
|
|
#define cmGlobalVisualStudioGenerator_h
|
|
|
|
#include "cmGlobalGenerator.h"
|
|
|
|
/** \class cmGlobalVisualStudioGenerator
|
|
* \brief Base class for global Visual Studio generators.
|
|
*
|
|
* cmGlobalVisualStudioGenerator provides functionality common to all
|
|
* global Visual Studio generators.
|
|
*/
|
|
class cmGlobalVisualStudioGenerator : public cmGlobalGenerator
|
|
{
|
|
public:
|
|
cmGlobalVisualStudioGenerator();
|
|
virtual ~cmGlobalVisualStudioGenerator();
|
|
|
|
/**
|
|
* Basic generate implementation for all VS generators.
|
|
*/
|
|
virtual void Generate();
|
|
|
|
/**
|
|
* Configure CMake's Visual Studio macros file into the user's Visual
|
|
* Studio macros directory.
|
|
*/
|
|
virtual void ConfigureCMakeVisualStudioMacros();
|
|
|
|
/**
|
|
* Where does this version of Visual Studio look for macros for the
|
|
* current user? Returns the empty string if this version of Visual
|
|
* Studio does not implement support for VB macros.
|
|
*/
|
|
virtual std::string GetUserMacrosDirectory();
|
|
|
|
/**
|
|
* What is the reg key path to "vsmacros" for this version of Visual
|
|
* Studio?
|
|
*/
|
|
virtual std::string GetUserMacrosRegKeyBase();
|
|
|
|
enum MacroName {MacroReload, MacroStop};
|
|
|
|
/**
|
|
* Call the ReloadProjects macro if necessary based on
|
|
* GetFilesReplacedDuringGenerate results.
|
|
*/
|
|
virtual void CallVisualStudioMacro(MacroName m,
|
|
const char* vsSolutionFile = 0);
|
|
|
|
// return true if target is fortran only
|
|
bool TargetIsFortranOnly(cmTarget& t);
|
|
const char* GetUtilityForTarget(cmTarget& target, const char*);
|
|
|
|
/** Get the top-level registry key for this VS version. */
|
|
std::string GetRegistryBase();
|
|
protected:
|
|
void FixUtilityDepends();
|
|
|
|
// Does this VS version link targets to each other if there are
|
|
// dependencies in the SLN file? This was done for VS versions
|
|
// below 8.
|
|
virtual bool VSLinksDependencies() const { return true; }
|
|
|
|
virtual const char* GetIDEVersion() = 0;
|
|
|
|
struct TargetCompare
|
|
{
|
|
bool operator()(cmTarget const* l, cmTarget const* r) const;
|
|
};
|
|
class OrderedTargetDependSet: public std::multiset<cmTarget*, TargetCompare>
|
|
{
|
|
public:
|
|
OrderedTargetDependSet(cmGlobalGenerator::TargetDependSet const&);
|
|
};
|
|
|
|
virtual void GetTargetSets(TargetDependSet& projectTargets,
|
|
TargetDependSet& originalTargets,
|
|
cmLocalGenerator* root, GeneratorVector const&);
|
|
|
|
bool CheckTargetLinks(cmTarget& target, const char* name);
|
|
private:
|
|
void FixUtilityDependsForTarget(cmTarget& target);
|
|
void CreateUtilityDependTarget(cmTarget& target);
|
|
};
|
|
|
|
#endif
|