Hi there, I've rebased and pushed the INTERFACE_LIBRARY-target-type branch to my clone again.
I'd like to get this one in to the next release soon after it opens for features, but there are still a few things to discuss about how it should work. Relevant previous threads: http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/6691 http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/3615/focus=5320 1) We already have ALIAS targets, which leaves INTERFACE_LIBRARY to cover the uses cases of add_library(iface INTERFACE) target_link_libraries(iface INTERFACE bing sing) target_link_libraries(foo INTERFACE bar iface bat) and add_library(iface INTERFACE) target_link_libraries(iface INTERFACE bing sing) target_link_libraries(foo INTERFACE bar $<TARGET_PROPERTY:iface,INTERFACE_LINK_LIBRARIES> bat ) I think that's fine. 2) In my branch, the 'old' (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)? are always ignored for INTERFACE_LIBRARY types, for simplicity like the above, and always being able to rely on the INTERFACE_LINK_LIBRARIES property for them. 3) I have left a TODO note in cmLocalGenerator.cxx about the return value from GetRealDependency. 4) The target_* commands always need to be invoked with an explicit INTERFACE option. 5) The INTERFACE_LIBRARY can be installed and exported, resulting in add_library(Foo::iface INTERFACE IMPORTED) # ... In my branch, the versions are a bit messed up in the install(EXPORT) code, due to what's currently in master. That will be cleaned later. 6) When we get transitive INTERFACE_SOURCES, it will be possible to 'link to' OBJECT_LIBRARYs: add_library(obj OBJECT foo.cpp) add_library(obj_iface INTERFACE) set_property(TARGET obj_iface PROPERTY INTERFACE_SOURCES $<TARGET_OBJECTS:obj> ) add_executable(user main.cpp) target_link_libraries(user obj_iface) So, it might make sense to revisit whether it is allowed to link to OBJECT_LIBRARYs. Either way, the obj_iface can't be exported in this case, because the dependent obj library can't be exported. 7) I've only implemented the support for this target type in the Makefile generator so far. I can also do the Ninja one after all of the details about how it works are sorted out. Can someone else implement the VS and Xcode support? I'm too unfamiliar with those generators. 8) I made it possible to use make iface to build the *dependencies* of iface. The special /requires /depends and /build sub-targets are not generated for INTERFACE_LIBRARY targets. 9) INTERFACE_LIBRARY targets are always effectively EXCLUDE_FROM_ALL because they have no direct outputs. Is there anything I'm missing here? Thanks, Steve. -- Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers