clean up object file build rule, and do not attempt to remove link_directories that are in the build tree

This commit is contained in:
Bill Hoffman 2001-11-13 15:54:41 -05:00
parent 274099f7ec
commit 6220a187ba
2 changed files with 98 additions and 78 deletions

View File

@ -397,15 +397,6 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
libDir != libdirs.end(); ++libDir)
{
std::string libpath = cmSystemTools::EscapeSpaces(libDir->c_str());
if (m_LibraryOutputPath.size())
{
if(m_LibraryOutputPath != libpath
&& (libpath.find(m_Makefile->GetHomeOutputDirectory())
!= std::string::npos))
{
emitted.insert(libpath);
}
}
if(emitted.insert(libpath).second)
{
std::string::size_type pos = libDir->find("-L");
@ -422,7 +413,7 @@ void cmUnixMakefileGenerator::OutputLinkLibraries(std::ostream& fout,
linkLibs += " ";
}
}
std::string librariesLinked;
const cmTarget::LinkLibraries& libs = tgt.GetLinkLibraries();
for(cmTarget::LinkLibraries::const_iterator lib = libs.begin();
@ -646,8 +637,11 @@ void cmUnixMakefileGenerator::OutputTargets(std::ostream& fout)
this->OutputExecutableRule(fout, l->first.c_str(), l->second);
break;
case cmTarget::UTILITY:
// This is handled by the OutputCustomRules method
case cmTarget::INSTALL_FILES:
// This is handled by the OutputInstallRules method
case cmTarget::INSTALL_PROGRAMS:
// This is handled by the OutputInstallRules method
break;
}
}
@ -1061,7 +1055,6 @@ void cmUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
fout << "# End of source group \"" << name.c_str() << "\"\n\n";
}
}
}
@ -1387,6 +1380,55 @@ void cmUnixMakefileGenerator::OutputMakeRules(std::ostream& fout)
}
}
void
cmUnixMakefileGenerator::
OutputBuildObjectFromSource(std::ostream& fout,
const char* shortName,
const cmSourceFile& source,
const char* extraCompileFlags,
bool shared)
{
std::string comment = "Build ";
std::string objectFile = std::string(shortName) + ".o";
comment += objectFile + " From ";
comment += source.GetFullPath();
std::string compileCommand;
std::string ext = source.GetSourceExtension();
if(ext == "c" )
{
compileCommand = "$(CMAKE_C_COMPILER) $(CMAKE_CFLAGS) ";
compileCommand += extraCompileFlags;
if(shared)
{
compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
}
compileCommand += "$(INCLUDE_FLAGS) -c ";
compileCommand += source.GetFullPath();
compileCommand += " -o ";
compileCommand += objectFile;
}
else
{
compileCommand = "$(CMAKE_CXX_COMPILER) $(CMAKE_CXXFLAGS) ";
compileCommand += extraCompileFlags;
if(shared)
{
compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
}
compileCommand += "$(INCLUDE_FLAGS) -c ";
compileCommand += source.GetFullPath();
compileCommand += " -o ";
compileCommand += objectFile;
}
this->OutputMakeRule(fout,
comment.c_str(),
objectFile.c_str(),
source.GetFullPath().c_str(),
compileCommand.c_str());
}
void cmUnixMakefileGenerator::OutputSourceObjectBuildRules(std::ostream& fout)
{
@ -1446,43 +1488,11 @@ void cmUnixMakefileGenerator::OutputSourceObjectBuildRules(std::ostream& fout)
// Only output a rule for each .o once.
if(rules.find(shortName) == rules.end())
{
std::string comment = "Build ";
std::string objectFile = shortName + ".o";
comment += objectFile + " From ";
comment += source->GetFullPath();
std::string compileCommand;
std::string ext = source->GetSourceExtension();
if(ext == "c" )
{
compileCommand = "$(CMAKE_C_COMPILER) $(CMAKE_CFLAGS) ";
compileCommand += exportsDef;
if(shared)
{
compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
}
compileCommand += "$(INCLUDE_FLAGS) -c ";
compileCommand += source->GetFullPath();
compileCommand += " -o ";
compileCommand += objectFile;
}
else
{
compileCommand = "$(CMAKE_CXX_COMPILER) $(CMAKE_CXXFLAGS) ";
compileCommand += exportsDef;
if(shared)
{
compileCommand += "$(CMAKE_SHLIB_CFLAGS) ";
}
compileCommand += "$(INCLUDE_FLAGS) -c ";
compileCommand += source->GetFullPath();
compileCommand += " -o ";
compileCommand += objectFile;
}
this->OutputMakeRule(fout,
comment.c_str(),
objectFile.c_str(),
source->GetFullPath().c_str(),
compileCommand.c_str());
this->OutputBuildObjectFromSource(fout,
shortName.c_str(),
*source,
exportsDef.c_str(),
shared);
rules.insert(shortName);
}
}

View File

@ -56,7 +56,7 @@ public:
///! Set cache only and recurse to false by default.
cmUnixMakefileGenerator();
~cmUnixMakefileGenerator();
virtual ~cmUnixMakefileGenerator();
///! Get the name for the generator.
virtual const char* GetName() {return "Unix Makefiles";}
@ -91,7 +91,7 @@ public:
* in the makefile. These would have been generated
* by the class cmMakeDepend.
*/
void OutputObjectDepends(std::ostream&);
virtual void OutputObjectDepends(std::ostream&);
/**
* Try to determine system infomation such as shared library
@ -99,36 +99,46 @@ public:
*/
virtual void ComputeSystemInfo();
private:
void RecursiveGenerateCacheOnly();
void ProcessDepends(const cmMakeDepend &md);
void GenerateCacheOnly();
void OutputMakefile(const char* file);
void OutputTargetRules(std::ostream& fout);
void OutputLinkLibraries(std::ostream&, const char* name, const cmTarget &);
protected:
virtual void RecursiveGenerateCacheOnly();
virtual void ProcessDepends(const cmMakeDepend &md);
virtual void GenerateCacheOnly();
virtual void OutputMakefile(const char* file);
virtual void OutputTargetRules(std::ostream& fout);
virtual void OutputLinkLibraries(std::ostream&, const char* name, const cmTarget &);
void OutputSharedLibraryRule(std::ostream&, const char* name, const cmTarget &);
void OutputModuleLibraryRule(std::ostream&, const char* name, const cmTarget &);
void OutputStaticLibraryRule(std::ostream&, const char* name, const cmTarget &);
void OutputExecutableRule(std::ostream&, const char* name, const cmTarget &);
virtual void OutputSharedLibraryRule(std::ostream&, const char* name,
const cmTarget &);
virtual void OutputModuleLibraryRule(std::ostream&, const char* name,
const cmTarget &);
virtual void OutputStaticLibraryRule(std::ostream&, const char* name,
const cmTarget &);
virtual void OutputExecutableRule(std::ostream&, const char* name,
const cmTarget &);
void OutputTargets(std::ostream&);
void OutputSubDirectoryRules(std::ostream&);
void OutputDependInformation(std::ostream&);
void OutputDependLibs(std::ostream&);
void OutputLibDepend(std::ostream&, const char*);
void OutputCustomRules(std::ostream&);
void OutputMakeVariables(std::ostream&);
void OutputMakeRules(std::ostream&);
void OutputInstallRules(std::ostream&);
void OutputSourceObjectBuildRules(std::ostream& fout);
void OutputSubDirectoryVars(std::ostream& fout,
const char* var,
const char* target,
const char* target1,
const char* target2,
const std::vector<std::string>& SubDirectories);
void OutputMakeRule(std::ostream&,
virtual void OutputTargets(std::ostream&);
virtual void OutputSubDirectoryRules(std::ostream&);
virtual void OutputDependLibs(std::ostream&);
virtual void OutputLibDepend(std::ostream&, const char*);
virtual void OutputCustomRules(std::ostream&);
virtual void OutputMakeVariables(std::ostream&);
virtual void OutputMakeRules(std::ostream&);
virtual void OutputInstallRules(std::ostream&);
virtual void OutputSourceObjectBuildRules(std::ostream& fout);
virtual void OutputBuildObjectFromSource(std::ostream& fout,
const char* shortName,
const cmSourceFile& source,
const char* extraCompileFlags,
bool sharedTarget);
virtual void OutputSubDirectoryVars(std::ostream& fout,
const char* var,
const char* target,
const char* target1,
const char* target2,
const std::vector<std::string>&
SubDirectories);
virtual void OutputMakeRule(std::ostream&,
const char* comment,
const char* target,
const char* depends,