diff options
author | Stephen Kelly <steveire@gmail.com> | 2013-08-21 20:00:48 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2013-10-21 13:46:27 (GMT) |
commit | b04f3b9a2a116b1956d5342637cda1348a5ee07b (patch) | |
tree | b7235edeb963d70d50711210172a7f3612711142 /Source/cmComputeTargetDepends.cxx | |
parent | dba4962b868c3baa7886dcd3f8b597e971a479a2 (diff) | |
download | CMake-b04f3b9a2a116b1956d5342637cda1348a5ee07b.zip CMake-b04f3b9a2a116b1956d5342637cda1348a5ee07b.tar.gz CMake-b04f3b9a2a116b1956d5342637cda1348a5ee07b.tar.bz2 |
Create make rules for INTERFACE_LIBRARY targets.
The result is that the depends of the target are created.
So,
add_library(somelib foo.cpp)
add_library(anotherlib EXCLUDE_FROM_ALL foo.cpp)
add_library(extra EXCLUDE_FROM_ALL foo.cpp)
target_link_libraries(anotherlib extra)
add_library(iface INTERFACE)
target_link_libraries(iface INTERFACE anotherlib)
Executing 'make iface' will result in the anotherlib and extra targets
being made.
Adding a regular executable to the INTERFACE of an INTERFACE_LIBRARY
will not result in the executable being built with 'make iface' because
of the logic in cmComputeTargetDepends::AddTargetDepend.
So far, this is implemented only for the Makefile generator. Other
generators will follow if this feature is possible for them.
Make INTERFACE_LIBRARY targets part of the all target by default.
Test this by building the all target and making the expected library
EXCLUDE_FROM_ALL.
Diffstat (limited to 'Source/cmComputeTargetDepends.cxx')
-rw-r--r-- | Source/cmComputeTargetDepends.cxx | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx index 0829add..7fd4754 100644 --- a/Source/cmComputeTargetDepends.cxx +++ b/Source/cmComputeTargetDepends.cxx @@ -208,7 +208,15 @@ void cmComputeTargetDepends::CollectTargetDepends(int depender_index) std::set<cmStdString> emitted; { std::vector<std::string> tlibs; - depender->GetDirectLinkLibraries(0, tlibs, depender); + if (depender->GetType() == cmTarget::INTERFACE_LIBRARY) + { + // For INTERFACE_LIBRARY depend on the interface instead. + depender->GetInterfaceLinkLibraries(0, tlibs, depender); + } + else + { + depender->GetDirectLinkLibraries(0, tlibs, depender); + } // A target should not depend on itself. emitted.insert(depender->GetName()); for(std::vector<std::string>::const_iterator lib = tlibs.begin(); |