1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 #ifndef cmLocalVisualStudio7Generator_h
13 #define cmLocalVisualStudio7Generator_h
15 #include "cmLocalVisualStudioGenerator.h"
16 #include "cmVisualStudioGeneratorOptions.h"
20 class cmCustomCommand;
24 class cmLocalVisualStudio7GeneratorOptions;
25 class cmLocalVisualStudio7GeneratorFCInfo;
26 class cmLocalVisualStudio7GeneratorInternals;
28 /** \class cmLocalVisualStudio7Generator
29 * \brief Write Visual Studio .NET project files.
31 * cmLocalVisualStudio7Generator produces a Visual Studio .NET project
32 * file for each target in its directory.
34 class cmLocalVisualStudio7Generator : public cmLocalVisualStudioGenerator
37 ///! Set cache only and recurse to false by default.
38 cmLocalVisualStudio7Generator(VSVersion v);
40 virtual ~cmLocalVisualStudio7Generator();
42 virtual void AddHelperCommands();
45 * Generate the makefile for this directory.
47 virtual void Generate();
49 enum BuildType {STATIC_LIBRARY, DLL, EXECUTABLE, WIN32_EXECUTABLE, UTILITY};
52 * Specify the type of the build: static, dll, or executable.
54 void SetBuildType(BuildType,const char *name);
56 void SetPlatformName(const char* n) { this->PlatformName = n;}
58 void SetExtraFlagTable(cmVS7FlagTable const* table)
59 { this->ExtraFlagTable = table; }
60 virtual std::string GetTargetDirectory(cmTarget const&) const;
61 cmSourceFile* CreateVCProjBuildRule();
62 void WriteStampFiles();
63 virtual std::string ComputeLongestObjectDirectory(cmTarget&) const;
65 virtual void ReadAndStoreExternalGUID(const char* name,
67 virtual void AddCMakeListsRules();
69 void CreateSingleVCProj(const char *lname, cmTarget &tgt);
71 typedef cmVisualStudioGeneratorOptions Options;
72 typedef cmLocalVisualStudio7GeneratorFCInfo FCInfo;
73 std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags,
74 const char* configName);
75 void FixGlobalTargets();
76 void WriteProjectFiles();
77 void WriteVCProjHeader(std::ostream& fout, const char *libName,
78 cmTarget &tgt, std::vector<cmSourceGroup> &sgs);
79 void WriteVCProjFooter(std::ostream& fout, cmTarget &target);
80 void WriteVCProjFile(std::ostream& fout, const char *libName,
82 void WriteConfigurations(std::ostream& fout,
83 const char *libName, cmTarget &tgt);
84 void WriteConfiguration(std::ostream& fout,
85 const char* configName,
86 const char* libName, cmTarget &tgt);
87 std::string EscapeForXML(const char* s);
88 std::string ConvertToXMLOutputPath(const char* path);
89 std::string ConvertToXMLOutputPathSingle(const char* path);
90 void OutputTargetRules(std::ostream& fout, const char* configName,
91 cmTarget &target, const char *libName);
92 void OutputBuildTool(std::ostream& fout, const char* configName,
93 cmTarget& t, const Options& targetOptions);
94 void OutputLibraryDirectories(std::ostream& fout,
95 std::vector<std::string> const& dirs);
96 void WriteProjectSCC(std::ostream& fout, cmTarget& target);
97 void WriteProjectStart(std::ostream& fout, const char *libName,
98 cmTarget &tgt, std::vector<cmSourceGroup> &sgs);
99 void WriteProjectStartFortran(std::ostream& fout, const char *libName,
101 void WriteVCProjBeginGroup(std::ostream& fout,
104 void WriteVCProjEndGroup(std::ostream& fout);
106 void WriteCustomRule(std::ostream& fout,
108 const cmCustomCommand& command,
110 void WriteTargetVersionAttribute(std::ostream& fout, cmTarget& target);
112 bool WriteGroup(const cmSourceGroup *sg,
113 cmTarget& target, std::ostream &fout,
114 const char *libName, std::vector<std::string> *configs);
116 friend class cmLocalVisualStudio7GeneratorFCInfo;
117 friend class cmLocalVisualStudio7GeneratorInternals;
120 friend class EventWriter;
122 cmVS7FlagTable const* ExtraFlagTable;
123 std::string ModuleDefinitionFile;
125 bool WindowsCEProject;
126 std::string PlatformName; // Win32 or x64
127 cmLocalVisualStudio7GeneratorInternals* Internal;