ENH: fix IntDir jump and build problem

This commit is contained in:
Bill Hoffman 2002-12-06 15:35:22 -05:00
parent 7987ce88cb
commit b0f4a4cb39
5 changed files with 44 additions and 32 deletions

View File

@ -28,6 +28,7 @@ cmGlobalUnixMakefileGenerator::cmGlobalUnixMakefileGenerator()
void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang, void cmGlobalUnixMakefileGenerator::EnableLanguage(const char* lang,
cmMakefile *mf) cmMakefile *mf)
{ {
mf->AddDefinition("CMAKE_CFG_INTDIR",".");
this->cmGlobalGenerator::EnableLanguage(lang, mf); this->cmGlobalGenerator::EnableLanguage(lang, mf);
} }

View File

@ -27,6 +27,7 @@ cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator()
void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang, void cmGlobalVisualStudio6Generator::EnableLanguage(const char* lang,
cmMakefile *mf) cmMakefile *mf)
{ {
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
this->cmGlobalGenerator::EnableLanguage(lang, mf); this->cmGlobalGenerator::EnableLanguage(lang, mf);

View File

@ -30,6 +30,7 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator()
void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang, void cmGlobalVisualStudio7Generator::EnableLanguage(const char* lang,
cmMakefile *mf) cmMakefile *mf)
{ {
mf->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
mf->AddDefinition("CMAKE_GENERATOR_CC", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CC", "cl");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl"); mf->AddDefinition("CMAKE_GENERATOR_CXX", "cl");
this->cmGlobalGenerator::EnableLanguage(lang, mf); this->cmGlobalGenerator::EnableLanguage(lang, mf);

View File

@ -1096,6 +1096,7 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
// for each target // for each target
const cmTargets &tgts = m_Makefile->GetTargets(); const cmTargets &tgts = m_Makefile->GetTargets();
for(cmTargets::const_iterator l = tgts.begin(); for(cmTargets::const_iterator l = tgts.begin();
l != tgts.end(); l++) l != tgts.end(); l++)
{ {
@ -1103,6 +1104,7 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
std::set<std::string> emitted; std::set<std::string> emitted;
if ((l->second.GetType() == cmTarget::SHARED_LIBRARY) if ((l->second.GetType() == cmTarget::SHARED_LIBRARY)
|| (l->second.GetType() == cmTarget::MODULE_LIBRARY) || (l->second.GetType() == cmTarget::MODULE_LIBRARY)
|| (l->second.GetType() == cmTarget::STATIC_LIBRARY)
|| (l->second.GetType() == cmTarget::EXECUTABLE) || (l->second.GetType() == cmTarget::EXECUTABLE)
|| (l->second.GetType() == cmTarget::WIN32_EXECUTABLE)) || (l->second.GetType() == cmTarget::WIN32_EXECUTABLE))
{ {
@ -1110,28 +1112,31 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
// A library should not depend on itself! // A library should not depend on itself!
emitted.insert(l->first); emitted.insert(l->first);
// for static libraries do not depend on other libraries
// Now, look at all link libraries specific to this target. if(l->second.GetType() != cmTarget::STATIC_LIBRARY)
const cmTarget::LinkLibraries& tlibs = l->second.GetLinkLibraries();
for(cmTarget::LinkLibraries::const_iterator lib = tlibs.begin();
lib != tlibs.end(); ++lib)
{ {
// Record that this library was used. // Now, look at all link libraries specific to this target.
used.insert(lib->first); const cmTarget::LinkLibraries& tlibs = l->second.GetLinkLibraries();
for(cmTarget::LinkLibraries::const_iterator lib = tlibs.begin();
// Don't emit the same library twice for this target. lib != tlibs.end(); ++lib)
if(emitted.insert(lib->first).second)
{ {
// Output this dependency. // Record that this library was used.
this->OutputLibDepend(fout, lib->first.c_str()); used.insert(lib->first);
// Don't emit the same library twice for this target.
if(emitted.insert(lib->first).second)
{
// Output this dependency.
this->OutputLibDepend(fout, lib->first.c_str());
}
} }
} }
// for all targets depend on utilities
// Now, look at all utilities specific to this target. // Now, look at all utilities specific to this target.
const std::set<cmStdString>& tutils = l->second.GetUtilities(); const std::set<cmStdString>& tutils = l->second.GetUtilities();
for(std::set<cmStdString>::const_iterator util = tutils.begin(); for(std::set<cmStdString>::const_iterator util = tutils.begin();
util != tutils.end(); ++util) util != tutils.end(); ++util)
{ {
// Record that this utility was used. // Record that this utility was used.
used.insert(*util); used.insert(*util);
@ -1142,7 +1147,6 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
this->OutputExeDepend(fout, util->c_str()); this->OutputExeDepend(fout, util->c_str());
} }
} }
fout << "\n"; fout << "\n";
} }
} }
@ -1161,6 +1165,7 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
// be stored in the cache // be stored in the cache
std::string libPath = *lib + "_CMAKE_PATH"; std::string libPath = *lib + "_CMAKE_PATH";
const char* cacheValue = m_Makefile->GetDefinition(libPath.c_str()); const char* cacheValue = m_Makefile->GetDefinition(libPath.c_str());
// if cache and not the current directory add a rule, to // if cache and not the current directory add a rule, to
// jump into the directory and build for the first time // jump into the directory and build for the first time
if(cacheValue && if(cacheValue &&
@ -1228,14 +1233,16 @@ void cmLocalUnixMakefileGenerator::OutputDependLibs(std::ostream& fout)
{ {
exepath += "/"; exepath += "/";
} }
exepath += *lib; std::string fullName = lib->c_str();
fullName += cmSystemTools::GetExecutableExtension();
exepath += fullName;
this->OutputBuildTargetInDir(fout, this->OutputBuildTargetInDir(fout,
cacheValue, cacheValue,
lib->c_str(), fullName.c_str(),
exepath.c_str(), exepath.c_str(),
m_Makefile-> m_Makefile->
GetDefinition("EXECUTABLE_OUTPUT_PATH") GetDefinition("EXECUTABLE_OUTPUT_PATH")
); );
} }
} }
} }
@ -1761,8 +1768,9 @@ void cmLocalUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
{ {
// escape spaces and convert to native slashes path for // escape spaces and convert to native slashes path for
// the command // the command
std::string command = std::string command = c->second.m_Command;
cmSystemTools::ConvertToOutputPath(c->second.m_Command.c_str()); cmSystemTools::ReplaceString(command, "/./", "/");
command = cmSystemTools::ConvertToOutputPath(command.c_str());
command += " "; command += " ";
// now add the arguments // now add the arguments
command += c->second.m_Arguments; command += c->second.m_Arguments;
@ -1776,9 +1784,12 @@ void cmLocalUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
for(std::set<std::string>::const_iterator d = for(std::set<std::string>::const_iterator d =
commandFiles.m_Depends.begin(); commandFiles.m_Depends.begin();
d != commandFiles.m_Depends.end(); ++d) d != commandFiles.m_Depends.end(); ++d)
{ {
std::string dep = cmSystemTools::ConvertToOutputPath(d->c_str()); std::string dep = *d;
depends += " "; cmSystemTools::ReplaceString(dep, "/./", "/");
cmSystemTools::ReplaceString(dep, "/$(IntDir)/", "/");
dep = cmSystemTools::ConvertToOutputPath(dep.c_str());
depends += " ";
depends += dep; depends += dep;
} }
// output rule // output rule
@ -1801,7 +1812,10 @@ void cmLocalUnixMakefileGenerator::OutputCustomRules(std::ostream& fout)
commandFiles.m_Depends.begin(); commandFiles.m_Depends.begin();
d != commandFiles.m_Depends.end(); ++d) d != commandFiles.m_Depends.end(); ++d)
{ {
std::string dep = cmSystemTools::ConvertToOutputPath(d->c_str()); std::string dep = *d;
cmSystemTools::ReplaceString(dep, "/./", "/");
cmSystemTools::ReplaceString(dep, "/$(IntDir)/", "/");
dep = cmSystemTools::ConvertToOutputPath(dep.c_str());
depends += " "; depends += " ";
depends += dep; depends += dep;
} }

View File

@ -1118,11 +1118,6 @@ void cmMakefile::AddDefaultDefinitions()
this->AddDefinition("APPLE", "1"); this->AddDefinition("APPLE", "1");
#endif #endif
#if defined(_WIN32) && !defined(__CYGWIN__)
this->AddDefinition("CMAKE_CFG_INTDIR","$(IntDir)");
#else
this->AddDefinition("CMAKE_CFG_INTDIR",".");
#endif
char temp[1024]; char temp[1024];
sprintf(temp, "%d", cmMakefile::GetMinorVersion()); sprintf(temp, "%d", cmMakefile::GetMinorVersion());
this->AddDefinition("CMAKE_MINOR_VERSION", temp); this->AddDefinition("CMAKE_MINOR_VERSION", temp);