On Thu, Mar 22, 2018 at 10:37 PM, Brad King <brad.k...@kitware.com> wrote:
> On 03/21/2018 06:01 PM, Craig Scott wrote: > > I swear I asked this a while back and there was an example given > > Maybe here: > > * https://gitlab.kitware.com/cmake/cmake/merge_requests/1581 Yes, that was it, thanks. > > Does anyone know of a specific example scenario where an > > INTERFACE IMPORTED library is the right choice over simply > > INTERFACE or IMPORTED on its own? > > A non-INTERFACE imported target needs an IMPORTED_LOCATION, > so an IMPORTED target wouldn't replace an INTERFACE IMPORTED > target. > > A plain INTERFACE library and an IMPORTED INTERFACE library are > nearly identical indeed, but the scope of the name differs. > > IMPORTED INTERFACE libraries mostly exist for install(EXPORT) > to produce from an installed/exported INTERFACE library. > They can't export as a normal INTERFACE library because > imported targets have visibility isolated to the directory > that imports them. > Okay. So the use case is inside a package's installed config file? i.e. if a project wants to define an INTERFACE library to be provided as part of its package, it should be defining an INTERFACE IMPORTED library? And that's only needed because by convention, when someone does a find_package(), any targets created by that are usually expected to be imported targets with non-global scope, so an ordinary INTERFACE library is not quite right because it has global scope (which CMake would allow, but INTERFACE IMPORTED would be better). Following that through, the combination INTERFACE IMPORTED GLOBAL is probably of little use now, since either: - It doesn't need an IMPORTED_LOCATION, in which case a plain INTERFACE library is appropriate and arguably clearer/simpler. - It does need an imported location but since IMPORTED GLOBAL now supports setting interface properties, it could do the job and is also arguably clearer/simpler. Only for pre-CMake 3.11 would INTERFACE IMPORTED GLOBAL be useful, since IMPORTED GLOBAL didn't support setting interface properties before then. And it would only be useful for the case where IMPORTED_LOCATION was being set to point at a real library (otherwise just use INTERFACE on its own). If there are any holes or errors in that, please let me know. Thanks. -- Craig Scott Melbourne, Australia https://crascit.com
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake-developers