diff options
author | Brad King <brad.king@kitware.com> | 2014-04-03 16:51:51 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-04-03 16:51:51 (GMT) |
commit | 93054aa84f283de17c58fa2ee19a2a4a1668027d (patch) | |
tree | 8b53dac2eb3a77909458cba210a6873915fb45ab /Source/cmComputeTargetDepends.cxx | |
parent | 1d4366ffac5814441c440d2832d9d8f187841113 (diff) | |
parent | 5de63265e3a22d9a8aa5ad437a5030ccfcbcd02d (diff) | |
download | CMake-93054aa84f283de17c58fa2ee19a2a4a1668027d.zip CMake-93054aa84f283de17c58fa2ee19a2a4a1668027d.tar.gz CMake-93054aa84f283de17c58fa2ee19a2a4a1668027d.tar.bz2 |
Merge topic 'target-sources-refactor'
5de63265 Genex: Only evaluate TARGET_OBJECTS to determine target sources.
aa0a3562 cmGeneratorTarget: Compute target objects on demand
042c1c83 cmTarget: Compute languages from object libraries on demand.
fdcefe3c cmGeneratorTarget: Compute consumed object libraries on demand.
c355d108 cmComputeTargetDepends: Track object library depends.
e5da9e51 cmTarget: Allow any generator expression in SOURCES property.
5702e106 cmTarget: Include TARGET_OBJECTS genex in target SOURCES property.
857d30b5 cmGlobalGenerator: Add interface to call ForceLinkerLanguages
28e1d2f8 cmStringCommand: Add GENEX_STRIP subcommand.
bf98cc25 Genex: Evaluate TARGET_OBJECTS as a normal expression.
8cd113ad cmTarget: Store strings instead of cmSourceFile* to represent SOURCES.
4959f341 cmSourceFileLocation: Collapse full path for directory comparisons.
fcc92878 cmSourceFileLocation: Remove unused Update method.
59e8740a cmTarget: Remove AddSourceFile method
26d494ba cmTarget: Use string API to add sources to cmTarget objects.
d38423ec cmTarget: Add a method to obtain list of filenames for sources.
...
Diffstat (limited to 'Source/cmComputeTargetDepends.cxx')
-rw-r--r-- | Source/cmComputeTargetDepends.cxx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx index 5ba843f..27fc862 100644 --- a/Source/cmComputeTargetDepends.cxx +++ b/Source/cmComputeTargetDepends.cxx @@ -16,6 +16,7 @@ #include "cmLocalGenerator.h" #include "cmMakefile.h" #include "cmSystemTools.h" +#include "cmSourceFile.h" #include "cmTarget.h" #include "cmake.h" @@ -213,6 +214,34 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index) { std::set<std::string> emitted; { + cmGeneratorTarget* gt = depender->GetMakefile()->GetLocalGenerator() + ->GetGlobalGenerator() + ->GetGeneratorTarget(depender); + std::vector<cmSourceFile const*> objectFiles; + gt->GetExternalObjects(objectFiles); + for(std::vector<cmSourceFile const*>::const_iterator + it = objectFiles.begin(); it != objectFiles.end(); ++it) + { + std::string objLib = (*it)->GetObjectLibrary(); + if (!objLib.empty() && emitted.insert(objLib).second) + { + if(depender->GetType() != cmTarget::EXECUTABLE && + depender->GetType() != cmTarget::STATIC_LIBRARY && + depender->GetType() != cmTarget::SHARED_LIBRARY && + depender->GetType() != cmTarget::MODULE_LIBRARY) + { + this->GlobalGenerator->GetCMakeInstance() + ->IssueMessage(cmake::FATAL_ERROR, + "Only executables and non-OBJECT libraries may " + "reference target objects.", + depender->GetBacktrace()); + return; + } + const_cast<cmTarget*>(depender)->AddUtility(objLib); + } + } + } + { std::vector<std::string> tlibs; depender->GetDirectLinkLibraries("", tlibs, depender); // A target should not depend on itself. |