|
|
@@ -25,6 +25,9 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
|
|
|
this->SetError("called with incorrect number of arguments");
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ m_TargetName = args[0];
|
|
|
+
|
|
|
// but we might not have any libs after variable expansion
|
|
|
if(args.size() < 2)
|
|
|
{
|
|
|
@@ -59,11 +62,16 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
|
|
|
if (cmSystemTools::IsOff(ldir))
|
|
|
{
|
|
|
std::string libPath = *i + "_CMAKE_PATH";
|
|
|
+
|
|
|
const char* dir = m_Makefile->GetDefinition(libPath.c_str());
|
|
|
if( dir )
|
|
|
{
|
|
|
m_Makefile->AddLinkDirectoryForTarget(args[0].c_str(), dir );
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_HasLocation.push_back(*i);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -73,3 +81,23 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+void cmTargetLinkLibrariesCommand::FinalPass()
|
|
|
+{
|
|
|
+ std::vector<std::string>::size_type cc;
|
|
|
+ std::string libPath;
|
|
|
+ for ( cc = 0; cc < m_HasLocation.size(); cc ++ )
|
|
|
+ {
|
|
|
+ libPath = m_HasLocation[cc] + "_CMAKE_PATH";
|
|
|
+ const char* dir = m_Makefile->GetDefinition(libPath.c_str());
|
|
|
+ if ( dir )
|
|
|
+ {
|
|
|
+ std::string str = "Library " + m_HasLocation[cc] +
|
|
|
+ " is defined using ADD_LIBRARY after the library is used "
|
|
|
+ "using TARGET_LINK_LIBRARIES for the target " + m_TargetName +
|
|
|
+ ". This breaks CMake's dependency "
|
|
|
+ "handling. Please fix the CMakeLists.txt file.";
|
|
|
+ this->SetError(str.c_str());
|
|
|
+ cmSystemTools::Message(str.c_str(), "CMake Error");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|