mirror of
https://github.com/reactos/CMake.git
synced 2025-02-14 00:13:22 +00:00
![Brad King](/assets/img/avatar_default.png)
fix many bugs related to target names being computed inconsistently. - Centralized computation of a target's file name to a method in cmTarget. Now that global knowledge is always available the *_CMAKE_PATH cache variables are no longer needed. - Centralized computation of link library command lines and link directory search order. - Moved computation of link directories needed to link CMake targets to be after evaluation of linking dependencies. This also removed alot of duplicate code in which each version had its own bugs. This commit is surrounded by the tags CMake-TargetNameCentralization1-pre and CMake-TargetNameCentralization1-post so make the large set of changes easy to identify.
123 lines
4.5 KiB
C++
123 lines
4.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#ifndef cmLocalVisualStudio7Generator_h
|
|
#define cmLocalVisualStudio7Generator_h
|
|
|
|
#include "cmLocalGenerator.h"
|
|
|
|
class cmMakeDepend;
|
|
class cmTarget;
|
|
class cmSourceFile;
|
|
class cmCustomCommand;
|
|
class cmSourceGroup;
|
|
struct cmVS7FlagTable;
|
|
|
|
/** \class cmLocalVisualStudio7Generator
|
|
* \brief Write a LocalUnix makefiles.
|
|
*
|
|
* cmLocalVisualStudio7Generator produces a LocalUnix makefile from its
|
|
* member m_Makefile.
|
|
*/
|
|
class cmLocalVisualStudio7Generator : public cmLocalGenerator
|
|
{
|
|
public:
|
|
///! Set cache only and recurse to false by default.
|
|
cmLocalVisualStudio7Generator();
|
|
|
|
virtual ~cmLocalVisualStudio7Generator();
|
|
|
|
/**
|
|
* Generate the makefile for this directory.
|
|
*/
|
|
virtual void Generate();
|
|
|
|
enum BuildType {STATIC_LIBRARY, DLL, EXECUTABLE, WIN32_EXECUTABLE, UTILITY};
|
|
|
|
/**
|
|
* Specify the type of the build: static, dll, or executable.
|
|
*/
|
|
void SetBuildType(BuildType,const char *name);
|
|
|
|
/**
|
|
* Return array of created DSP names in a STL vector.
|
|
* Each executable must have its own dsp.
|
|
*/
|
|
std::vector<std::string> GetCreatedProjectNames()
|
|
{
|
|
return m_CreatedProjectNames;
|
|
}
|
|
void SetVersion71() {m_Version = 71;}
|
|
void SetVersion8() {m_Version = 8;}
|
|
virtual void ConfigureFinalPass();
|
|
private:
|
|
void FillFlagMapFromCommandFlags(std::map<cmStdString, cmStdString>& flagMap,
|
|
cmVS7FlagTable* flagTable,
|
|
std::string& flags);
|
|
void OutputVCProjFile();
|
|
void WriteVCProjHeader(std::ostream& fout, const char *libName,
|
|
cmTarget &tgt, std::vector<cmSourceGroup> &sgs);
|
|
void WriteVCProjFooter(std::ostream& fout);
|
|
void CreateSingleVCProj(const char *lname, cmTarget &tgt);
|
|
void WriteVCProjFile(std::ostream& fout, const char *libName,
|
|
cmTarget &tgt);
|
|
void AddVCProjBuildRule();
|
|
void WriteConfigurations(std::ostream& fout,
|
|
const char *libName, cmTarget &tgt);
|
|
void WriteConfiguration(std::ostream& fout,
|
|
const char* configName,
|
|
const char* libName, cmTarget &tgt);
|
|
std::string EscapeForXML(const char* s);
|
|
std::string ConvertToXMLOutputPath(const char* path);
|
|
std::string ConvertToXMLOutputPathSingle(const char* path);
|
|
void OutputDefineFlags(const char* flags,
|
|
std::ostream& fout);
|
|
void OutputTargetRules(std::ostream& fout, cmTarget &target,
|
|
const char *libName);
|
|
void OutputBuildTool(std::ostream& fout, const char* configName,
|
|
const char* libname, cmTarget& t);
|
|
void OutputLibraries(std::ostream& fout,
|
|
std::vector<cmStdString> const& libs);
|
|
void OutputLibraryDirectories(std::ostream& fout,
|
|
std::vector<cmStdString> const& dirs);
|
|
void OutputModuleDefinitionFile(std::ostream& fout, cmTarget &target);
|
|
void WriteProjectStart(std::ostream& fout, const char *libName,
|
|
cmTarget &tgt, std::vector<cmSourceGroup> &sgs);
|
|
void WriteVCProjBeginGroup(std::ostream& fout,
|
|
const char* group,
|
|
const char* filter);
|
|
void WriteVCProjEndGroup(std::ostream& fout);
|
|
void WriteCustomRule(std::ostream& fout,
|
|
const char* source,
|
|
const char* command,
|
|
const char* comment,
|
|
const std::vector<std::string>& depends,
|
|
const char* output,
|
|
const char* extraFlags);
|
|
|
|
void WriteGroup(const cmSourceGroup *sg, cmTarget target, std::ostream &fout, const char *libName, std::vector<std::string> *configs);
|
|
virtual std::string GetTargetDirectory(cmTarget&);
|
|
|
|
std::vector<std::string> m_CreatedProjectNames;
|
|
std::string m_LibraryOutputPath;
|
|
std::string m_ExecutableOutputPath;
|
|
std::string m_ModuleDefinitionFile;
|
|
int m_Version;
|
|
};
|
|
|
|
#endif
|
|
|