diff options
author | Brad King <brad.king@kitware.com> | 2014-06-16 13:45:46 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2014-06-23 13:17:06 (GMT) |
commit | 069d60fe039ae1d797a26786f3cd4c23afc27b07 (patch) | |
tree | 10d884a76fed1c3d9a1879d7f0208480e0e79380 /Source/cmTarget.cxx | |
parent | 47ab3ca64105cdfcc7b57ffe037aa93d8226b945 (diff) | |
download | CMake-069d60fe039ae1d797a26786f3cd4c23afc27b07.zip CMake-069d60fe039ae1d797a26786f3cd4c23afc27b07.tar.gz CMake-069d60fe039ae1d797a26786f3cd4c23afc27b07.tar.bz2 |
cmTarget: Add method to lookup other targets in a target's scope
Move the main implementation of cmComputeLinkDepends::FindTargetToLink
into cmTarget.
Diffstat (limited to 'Source/cmTarget.cxx')
-rw-r--r-- | Source/cmTarget.cxx | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 4ef481a..9a6c93c 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -6681,6 +6681,37 @@ cmTarget::ComputeLinkImplementationLanguages(const std::string& config, } //---------------------------------------------------------------------------- +cmTarget const* cmTarget::FindTargetToLink(std::string const& name) const +{ + cmTarget const* tgt = this->Makefile->FindTargetToUse(name); + + // Skip targets that will not really be linked. This is probably a + // name conflict between an external library and an executable + // within the project. + if(tgt && tgt->GetType() == cmTarget::EXECUTABLE && + !tgt->IsExecutableWithExports()) + { + tgt = 0; + } + + if(tgt && tgt->GetType() == cmTarget::OBJECT_LIBRARY) + { + cmOStringStream e; + e << "Target \"" << this->GetName() << "\" links to " + "OBJECT library \"" << tgt->GetName() << "\" but this is not " + "allowed. " + "One may link only to STATIC or SHARED libraries, or to executables " + "with the ENABLE_EXPORTS property set."; + cmake* cm = this->Makefile->GetCMakeInstance(); + cm->IssueMessage(cmake::FATAL_ERROR, e.str(), this->GetBacktrace()); + tgt = 0; + } + + // Return the target found, if any. + return tgt; +} + +//---------------------------------------------------------------------------- std::string cmTarget::CheckCMP0004(std::string const& item) const { // Strip whitespace off the library names because we used to do this |