On 11/04/2013 10:31 AM, Clinton Stimpson wrote:
> But I see 2 others new problems.

Those are features and they work together as intended.

> 1)
> cmake_minimum_required(VERSION 2.8)
> add_library(foo SHARED foo.cpp)
> add_library(bar SHARED bar.cpp)
> target_link_libraries(bar foo)
> set_target_properties(bar PROPERTIES LINK_INTERFACE_LIBRARIES "")
> add_executable(exe exe.cpp)
> target_link_libraries(exe bar)
> 
> With 2.8.12.1, I now get a new warning that I did not get with 2.8.12.  I'm 
> not sure why I'm getting that warning because the linking of exe looks 
> correct.
> 
> CMake Warning (dev) in CMakeLists.txt:
>   Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
>   interface.  Run "cmake --help-policy CMP0022" for policy details.  Use the
>   cmake_policy command to set the policy and suppress this warning.
> 
>   Target "bar" has an INTERFACE_LINK_LIBRARIES property which differs from
>   its LINK_INTERFACE_LIBRARIES properties.
>   INTERFACE_LINK_LIBRARIES:
>     foo
>   LINK_INTERFACE_LIBRARIES:

This is a correct warning according to the definition of CMP0022.
The bug you reported in 2.8.12.0 also caused it to not warn here.
Prior to my fix CMake did not track the new INTERFACE_LINK_LIBRARIES
value correctly for the plain tll signature so it didn't realize
that things would change and therefore did not warn.

> 2)
> cmake_minimum_required(VERSION 2.8.12)
> add_library(foo SHARED foo.cpp)
> add_library(bar SHARED bar.cpp)
> target_link_libraries(bar foo)
> set_target_properties(bar PROPERTIES LINK_INTERFACE_LIBRARIES "")
> add_executable(exe exe.cpp)
> target_link_libraries(exe bar)
> 
> I get no warning or error, but my LINK_INTERFACE_LIBRARIES property was not 
> respected and it linked both foo and bar into exe.  This appears to be a 
> regression from 2.8.12 to 2.8.12.1.

This is also correct behavior.  The NEW behavior of CMP0022
is to ignore LINK_INTERFACE_LIBRARIES and use the new
INTERFACE_LINK_LIBRARIES which is now populated by the tll call.

The warning you get when the policy is not set is telling
you exactly what will change when the policy is set to NEW.
Therefore it gives you a chance to fix your code before setting
the policy (by bumping the min req version or explicitly).

This is exactly how policies are intended to work.  It was
very unfortunate that 2.8.12.0 was released without giving
projects any release candidates with a correct CMP0022 impl.

-Brad
--

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

Reply via email to