[CMake] [cmake-developers] Why does INTERFACE type targets only support whitelisted properties?
Ben Boeckel
ben.boeckel at kitware.com
Wed Jan 13 10:54:11 EST 2016
On Mon, Jan 11, 2016 at 16:47:03 -0500, Taylor Braun-Jones wrote:
> I have another INTERFACE property use case that is not whitelisted, but
> should be: VERSION
VERSION is a special property for libraries. Particularly the name for
the file with the actual content of the library (the SOVERSION and name
of the library being symlinks to it):
https://cmake.org/cmake/help/latest/prop_tgt/VERSION.html
INTERFACE targets have no need for this property.
> Consider library project Foo that uses a header-only project Bar. In
> FooConfig.cmake, it is a important to ensure any projects using Foo also
> use the exact same version of Bar that Foo was originally built with
> (Failure to do so can lead to subtle, hard-to-find bugs like violation of
> the one definition rule). Assuming project Bar creates an imported target
> "Bar" with a VERSION property set like:
>
> set_property(TARGET Bar APPEND PROPERTY VERSION 1.2.3)
Also, this property is not a list (probably?), so APPEND isn't really
correct. It indicates that the value here should be (list-)appended to
the existing value.
> Then project Foo should be able to have something like:
>
> == CMakeLists.txt ==
> ...
> get_property(FOO_BAR_VERSION TARGET BAR PROPERTY VERSION)
> configure_file(FooConfig.cmake.in FooConfig.cmake @ONLY)
>
> == FooConfig.cmake.in ==
> ...
> find_package(Bar "@FOO_BAR_VERSION@" EXACT REQUIRED)
find_package(Foo) should set a Foo_VERSION variable (if known):
https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-version-file
> But, alas, this is not currently possible. I'm ambivalent about whether
> INTERFACE properties should be whitelisted vs blacklisted vs unrestricted,
> but at least this VERSION property seems valid to allow.
Currently, they are whitelisted, but I think any property not understood
by CMake directly (i.e., user-set properties) would probably be fine.
--Ben
More information about the CMake
mailing list