Ninja: move -LIBPATH behind -link option
Don' pass linker option to the compile
This commit is contained in:
parent
dbd99d6fbb
commit
8d674e7844
|
@ -676,9 +676,13 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang,
|
|||
// Static Library:
|
||||
// Shared Module:
|
||||
std::string linkLibs; // should be set
|
||||
std::string frameworkPath;
|
||||
std::string linkPath;
|
||||
std::string flags; // should be set
|
||||
std::string linkFlags; // should be set
|
||||
this->GetTargetFlags(linkLibs, flags, linkFlags, &target);
|
||||
this->GetTargetFlags(linkLibs, frameworkPath, linkPath, flags, linkFlags,
|
||||
&target);
|
||||
linkLibs = frameworkPath + linkPath + linkLibs;
|
||||
cmLocalGenerator::RuleVariables vars;
|
||||
vars.Language = llang;
|
||||
vars.Objects = objs.c_str();
|
||||
|
@ -1450,6 +1454,8 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector<std::string>& dirs,
|
|||
void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
|
||||
std::string& flags,
|
||||
std::string& linkFlags,
|
||||
std::string& frameworkPath,
|
||||
std::string& linkPath,
|
||||
cmGeneratorTarget* target)
|
||||
{
|
||||
std::string buildType =
|
||||
|
@ -1531,9 +1537,8 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
|
|||
linkFlags += " ";
|
||||
}
|
||||
}
|
||||
cmOStringStream linklibsStr;
|
||||
this->OutputLinkLibraries(linklibsStr, *target, false);
|
||||
linkLibs = linklibsStr.str();
|
||||
this->OutputLinkLibraries(linkLibs, frameworkPath, linkPath,
|
||||
*target, false);
|
||||
}
|
||||
break;
|
||||
case cmTarget::EXECUTABLE:
|
||||
|
@ -1557,9 +1562,8 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
|
|||
return;
|
||||
}
|
||||
this->AddLanguageFlags(flags, linkLanguage, buildType.c_str());
|
||||
cmOStringStream linklibs;
|
||||
this->OutputLinkLibraries(linklibs, *target, false);
|
||||
linkLibs = linklibs.str();
|
||||
this->OutputLinkLibraries(linkLibs, frameworkPath, linkPath,
|
||||
*target, false);
|
||||
if(cmSystemTools::IsOn
|
||||
(this->Makefile->GetDefinition("BUILD_SHARED_LIBS")))
|
||||
{
|
||||
|
@ -1651,10 +1655,13 @@ std::string cmLocalGenerator::ConvertToLinkReference(std::string const& lib)
|
|||
* targetLibrary should be a NULL pointer. For libraries, it should point
|
||||
* to the name of the library. This will not link a library against itself.
|
||||
*/
|
||||
void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
|
||||
void cmLocalGenerator::OutputLinkLibraries(std::string& linkLibraries,
|
||||
std::string& frameworkPath,
|
||||
std::string& linkPath,
|
||||
cmGeneratorTarget &tgt,
|
||||
bool relink)
|
||||
{
|
||||
cmOStringStream fout;
|
||||
const char* config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE");
|
||||
cmComputeLinkInformation* pcli = tgt.GetLinkInformation(config);
|
||||
if(!pcli)
|
||||
|
@ -1688,9 +1695,9 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
|
|||
for(std::vector<std::string>::const_iterator fdi = fwDirs.begin();
|
||||
fdi != fwDirs.end(); ++fdi)
|
||||
{
|
||||
linkLibs += "-F";
|
||||
linkLibs += this->Convert(fdi->c_str(), NONE, SHELL, false);
|
||||
linkLibs += " ";
|
||||
frameworkPath = " -F";
|
||||
frameworkPath += this->Convert(fdi->c_str(), NONE, SHELL, false);
|
||||
frameworkPath += " ";
|
||||
}
|
||||
|
||||
// Append the library search path flags.
|
||||
|
@ -1699,10 +1706,10 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
|
|||
libDir != libDirs.end(); ++libDir)
|
||||
{
|
||||
std::string libpath = this->ConvertToOutputForExisting(libDir->c_str());
|
||||
linkLibs += libPathFlag;
|
||||
linkLibs += libpath;
|
||||
linkLibs += libPathTerminator;
|
||||
linkLibs += " ";
|
||||
linkPath += " " + libPathFlag;
|
||||
linkPath += libpath;
|
||||
linkPath += libPathTerminator;
|
||||
linkPath += " ";
|
||||
}
|
||||
|
||||
// Append the link items.
|
||||
|
@ -1774,6 +1781,8 @@ void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout,
|
|||
{
|
||||
fout << stdLibs << " ";
|
||||
}
|
||||
|
||||
linkLibraries = fout.str();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -335,11 +335,16 @@ public:
|
|||
void GetTargetFlags(std::string& linkLibs,
|
||||
std::string& flags,
|
||||
std::string& linkFlags,
|
||||
std::string& frameworkPath,
|
||||
std::string& linkPath,
|
||||
cmGeneratorTarget* target);
|
||||
|
||||
protected:
|
||||
///! put all the libraries for a target on into the given stream
|
||||
virtual void OutputLinkLibraries(std::ostream&, cmGeneratorTarget&,
|
||||
virtual void OutputLinkLibraries(std::string& linkLibraries,
|
||||
std::string& frameworkPath,
|
||||
std::string& linkPath,
|
||||
cmGeneratorTarget &,
|
||||
bool relink);
|
||||
|
||||
// Expand rule variables in CMake of the type found in language rules
|
||||
|
|
|
@ -318,10 +318,13 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
|||
this->LocalGenerator->SetLinkScriptShell(useLinkScript);
|
||||
|
||||
// Collect up flags to link in needed libraries.
|
||||
cmOStringStream linklibs;
|
||||
this->LocalGenerator->OutputLinkLibraries(linklibs, *this->GeneratorTarget,
|
||||
std::string linkLibs;
|
||||
std::string frameworkPath;
|
||||
std::string linkPath;
|
||||
this->LocalGenerator->OutputLinkLibraries(linkLibs, frameworkPath, linkPath,
|
||||
*this->GeneratorTarget,
|
||||
relink);
|
||||
|
||||
linkLibs = frameworkPath + linkPath + linkLibs;
|
||||
// Construct object file lists that may be needed to expand the
|
||||
// rule.
|
||||
std::string buildObjs;
|
||||
|
@ -360,8 +363,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
|
|||
vars.TargetVersionMajor = targetVersionMajor.c_str();
|
||||
vars.TargetVersionMinor = targetVersionMinor.c_str();
|
||||
|
||||
std::string linkString = linklibs.str();
|
||||
vars.LinkLibraries = linkString.c_str();
|
||||
vars.LinkLibraries = linkLibs.c_str();
|
||||
vars.Flags = flags.c_str();
|
||||
vars.LinkFlags = linkFlags.c_str();
|
||||
// Expand placeholders in the commands.
|
||||
|
|
|
@ -542,11 +542,15 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
|
|||
this->LocalGenerator->SetLinkScriptShell(useLinkScript);
|
||||
|
||||
// Collect up flags to link in needed libraries.
|
||||
cmOStringStream linklibs;
|
||||
std::string linkLibs;
|
||||
if(this->Target->GetType() != cmTarget::STATIC_LIBRARY)
|
||||
{
|
||||
std::string frameworkPath;
|
||||
std::string linkPath;
|
||||
this->LocalGenerator
|
||||
->OutputLinkLibraries(linklibs, *this->GeneratorTarget, relink);
|
||||
->OutputLinkLibraries(linkLibs, frameworkPath, linkPath,
|
||||
*this->GeneratorTarget, relink);
|
||||
linkLibs = frameworkPath + linkPath + linkLibs;
|
||||
}
|
||||
|
||||
// Construct object file lists that may be needed to expand the
|
||||
|
@ -587,8 +591,7 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
|
|||
cmLocalGenerator::SHELL);
|
||||
vars.ObjectDir = objdir.c_str();
|
||||
vars.Target = targetOutPathReal.c_str();
|
||||
std::string linkString = linklibs.str();
|
||||
vars.LinkLibraries = linkString.c_str();
|
||||
vars.LinkLibraries = linkLibs.c_str();
|
||||
vars.ObjectsQuoted = buildObjs.c_str();
|
||||
if (this->Target->HasSOName(this->ConfigName))
|
||||
{
|
||||
|
|
|
@ -420,12 +420,17 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
|
|||
cmNinjaDeps explicitDeps = this->GetObjects();
|
||||
cmNinjaDeps implicitDeps = this->ComputeLinkDeps();
|
||||
|
||||
std::string frameworkPath;
|
||||
std::string linkPath;
|
||||
this->GetLocalGenerator()->GetTargetFlags(vars["LINK_LIBRARIES"],
|
||||
vars["FLAGS"],
|
||||
vars["LINK_FLAGS"],
|
||||
frameworkPath,
|
||||
linkPath,
|
||||
this->GetGeneratorTarget());
|
||||
|
||||
this->AddModuleDefinitionFlag(vars["LINK_FLAGS"]);
|
||||
vars["LINK_FLAGS"] += frameworkPath + linkPath;
|
||||
|
||||
// Compute architecture specific link flags. Yes, these go into a different
|
||||
// variable for executables, probably due to a mistake made when duplicating
|
||||
|
|
|
@ -628,10 +628,14 @@ bool cmake::FindPackage(const std::vector<std::string>& args)
|
|||
|
||||
|
||||
std::string linkLibs;
|
||||
std::string frameworkPath;
|
||||
std::string linkPath;
|
||||
std::string flags;
|
||||
std::string linkFlags;
|
||||
cmGeneratorTarget gtgt(tgt);
|
||||
lg->GetTargetFlags(linkLibs, flags, linkFlags, >gt);
|
||||
lg->GetTargetFlags(linkLibs, frameworkPath, linkPath, flags, linkFlags,
|
||||
>gt);
|
||||
linkLibs = frameworkPath + linkPath + linkLibs;
|
||||
|
||||
printf("%s\n", linkLibs.c_str() );
|
||||
|
||||
|
|
Loading…
Reference in New Issue