Brad King wrote:
> Well, we want generator expressions in tll() to work for static
> libraries. Therefore we must populate INTERFACE_LINK_LIBRARIES
> for IMPORTED targets generated from static libraries. However,
> in the producing (exporting) project it does not make sense to
> have separate LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES for
> static libraries. The property must remain undefined for static
> libraries just as LINK_INTERFACE_LIBRARIES is now.
add_library(picon STATIC libone.cpp)
add_library(picoff STATIC libtwo.cpp)
target_link_libraries(picoff LINK_INTERFACE_LIBRARIES picon)
get_target_property(_res picoff LINK_INTERFACE_LIBRARIES)
message("PROP : ${_res}")
outputs this with cmake 2.8.9:
PROP : picon
I don't know if that's a bug, or if you mean that the IMPORTED_ variant is
never defined by export() or install(EXPORT). I can confirm that the
property contents are not exported for static libraries.
>
> Somehow the "link implementation" must be turned into
> IMPORTED_LINK_INTERFACE_LIBRARIES_<CONFIG> and/or the new
> INTERFACE_LINK_LIBRARIES when exporting targets.
add_library(picon STATIC libone.cpp)
add_library(picoff STATIC libtwo.cpp)
target_link_libraries(picoff picon)
causes the IMPORTED_LINK_INTERFACE_LIBRARIES_<CONFIG> of the IMPORTED picoff
to contain picon with CMake 2.8.9, because
cmExportFileGenerator::SetImportDetailProperties populates that with the
link implementation in the case of static libraries.
Currently, in the add-INTERFACE_LINK_LIBRARIES-property branch, the
INTERFACE_LINK_LIBRARIES property is read for static libraries if the policy
is new, even though it is LINK_LIBRARIES that we want to read in the case of
STATIC libraries. That can only really be addressed when my followup topic
to introduce the LINK_LIBRARIES property is merged. The question is how to
deal with that?
I can update add-INTERFACE_LINK_LIBRARIES-property to skip reading
INTERFACE_LINK_LIBRARIES for STATIC libraries, and then revert that later
when LINK_LIBRARIES is in, or I could simply not add such a patch, in the
understanding that the case for STATIC libraries will be handled in a future
topic.
I prefer the latter.
> That must be
> built into ComputeLinkInterface if it is not already. Again I'm
> not sure how to know when to not export the old interface. In
> this case it is never set explicitly by the user. Perhaps it can
> depend on whether the link implementation requires any generator
> expressions besides $<CONFIG:>. Such expressions would not be
> representable in the old interface anyway.
Reading this again, I think I agree with that. I think it should be handled
in a future topic though.
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