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 cmVisualStudioTargetGenerator_h
13 #define cmVisualStudioTargetGenerator_h
14 #include "cmStandardIncludes.h"
18 class cmGeneratorTarget;
19 class cmGeneratedFileStream;
20 class cmGlobalVisualStudio10Generator;
22 class cmCustomCommand;
23 class cmLocalVisualStudio7Generator;
24 class cmComputeLinkInformation;
25 class cmVisualStudioGeneratorOptions;
26 #include "cmSourceGroup.h"
28 class cmVisualStudio10TargetGenerator
31 cmVisualStudio10TargetGenerator(cmTarget* target,
32 cmGlobalVisualStudio10Generator* gg);
33 ~cmVisualStudio10TargetGenerator();
35 // used by cmVisualStudioGeneratorOptions
36 void WritePlatformConfigTag(
40 const char* attribute = 0,
42 std::ostream* strm = 0
48 cmSourceFile* SourceFile;
51 struct ToolSources: public std::vector<ToolSource> {};
53 std::string ConvertPath(std::string const& path, bool forceRelative);
54 void ConvertToWindowsSlash(std::string& s);
55 void WriteString(const char* line, int indentLevel);
56 void WriteProjectConfigurations();
57 void WriteProjectConfigurationValues();
58 void WriteSource(const char* tool, cmSourceFile* sf, const char* end = 0);
59 void WriteSources(const char* tool, std::vector<cmSourceFile*> const&);
60 void WriteAllSources();
61 void WriteDotNetReferences();
62 void WriteEmbeddedResourceGroup();
63 void WriteWinRTReferences();
64 void WritePathAndIncrementalLinkOptions();
65 void WriteItemDefinitionGroups();
67 bool ComputeClOptions();
68 bool ComputeClOptions(std::string const& configName);
69 void WriteClOptions(std::string const& config,
70 std::vector<std::string> const & includes);
71 void WriteRCOptions(std::string const& config,
72 std::vector<std::string> const & includes);
73 bool ComputeLinkOptions();
74 bool ComputeLinkOptions(std::string const& config);
75 void WriteLinkOptions(std::string const& config);
76 void WriteMidlOptions(std::string const& config,
77 std::vector<std::string> const & includes);
78 void OutputIncludes(std::vector<std::string> const & includes);
79 void OutputLinkIncremental(std::string const& configName);
80 void WriteCustomRule(cmSourceFile* source,
81 cmCustomCommand const & command);
82 void WriteCustomCommands();
83 void WriteCustomCommand(cmSourceFile* sf);
85 void WriteProjectReferences();
86 bool OutputSourceSpecificFlags(cmSourceFile* source);
87 void AddLibraries(cmComputeLinkInformation& cli, std::string& libstring);
88 void WriteLibOptions(std::string const& config);
89 void WriteEvents(std::string const& configName);
90 void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
91 std::string const& configName);
92 void WriteGroupSources(const char* name, ToolSources const& sources,
93 std::vector<cmSourceGroup>& );
94 void AddMissingSourceGroups(std::set<cmSourceGroup*>& groupsUsed,
95 const std::vector<cmSourceGroup>& allGroups);
96 bool IsResxHeader(const std::string& headerFile);
99 typedef cmVisualStudioGeneratorOptions Options;
100 typedef std::map<cmStdString, Options*> OptionsMap;
101 OptionsMap ClOptions;
102 OptionsMap LinkOptions;
103 std::string PathToVcxproj;
105 cmGeneratorTarget* GeneratorTarget;
106 cmMakefile* Makefile;
107 std::string Platform;
110 cmGlobalVisualStudio10Generator* GlobalGenerator;
111 cmGeneratedFileStream* BuildFileStream;
112 cmLocalVisualStudio7Generator* LocalGenerator;
113 std::set<cmSourceFile*> SourcesVisited;
115 typedef std::map<cmStdString, ToolSources> ToolSourceMap;