Setting properties to interface

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Setting properties to interface

Tiago Macarios
Hi,

Given a template-only library exposed throw an interface is it possible to set the necessary CXX_STANDARD necessary to use the library? The code below would be what I am trying to do.

add_library(a_lib INTERFACE)

set_property(TARGET a_lib
    PROPERTY CXX_STANDARD 11
    PROPERTY CXX_STANDARD_REQUIRED ON
)

target_compile_definitions(a_lib INTERFACE
    SOME_DEF
)


Unfortunately, this does not work and fails with:

  INTERFACE_LIBRARY targets may only have whitelisted properties.
  The property "CXX_STANDARD_REQUIRED" is not allowed.

Any ideas?

Tiago

--

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:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Setting properties to interface

Craig Scott-3
As per my other email just now, you should be able to achieve what you want with the new CMake 3.8.0 release:

add_library(a_lib INTERFACE)
target_compile_features(a_lib INTERFACE cxx_std_11)

I did a quick test with the above just now and it seems to work as expected. You may, however, still want to set the CXX_EXTENSIONS target property (or set it project wide with CMAKE_CXX_EXTENSIONS) to control whether or not compiler extensions are enabled too.



On Sun, Apr 16, 2017 at 12:45 PM, Tiago Macarios <[hidden email]> wrote:
Hi,

Given a template-only library exposed throw an interface is it possible to set the necessary CXX_STANDARD necessary to use the library? The code below would be what I am trying to do.

add_library(a_lib INTERFACE)

set_property(TARGET a_lib
    PROPERTY CXX_STANDARD 11
    PROPERTY CXX_STANDARD_REQUIRED ON
)

target_compile_definitions(a_lib INTERFACE
    SOME_DEF
)


Unfortunately, this does not work and fails with:

  INTERFACE_LIBRARY targets may only have whitelisted properties.
  The property "CXX_STANDARD_REQUIRED" is not allowed.

Any ideas?

Tiago

--

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:
http://public.kitware.com/mailman/listinfo/cmake



--
Craig Scott
Melbourne, Australia

--

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:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Setting properties to interface

Tiago Macarios
Thanks Craig! That works. Just to confirm, there is no way to disable extensions for a single interface?

On Sun, Apr 16, 2017 at 1:51 AM, Craig Scott <[hidden email]> wrote:
As per my other email just now, you should be able to achieve what you want with the new CMake 3.8.0 release:

add_library(a_lib INTERFACE)
target_compile_features(a_lib INTERFACE cxx_std_11)

I did a quick test with the above just now and it seems to work as expected. You may, however, still want to set the CXX_EXTENSIONS target property (or set it project wide with CMAKE_CXX_EXTENSIONS) to control whether or not compiler extensions are enabled too.



On Sun, Apr 16, 2017 at 12:45 PM, Tiago Macarios <[hidden email]> wrote:
Hi,

Given a template-only library exposed throw an interface is it possible to set the necessary CXX_STANDARD necessary to use the library? The code below would be what I am trying to do.

add_library(a_lib INTERFACE)

set_property(TARGET a_lib
    PROPERTY CXX_STANDARD 11
    PROPERTY CXX_STANDARD_REQUIRED ON
)

target_compile_definitions(a_lib INTERFACE
    SOME_DEF
)


Unfortunately, this does not work and fails with:

  INTERFACE_LIBRARY targets may only have whitelisted properties.
  The property "CXX_STANDARD_REQUIRED" is not allowed.

Any ideas?

Tiago

--

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:
http://public.kitware.com/mailman/listinfo/cmake



--
Craig Scott
Melbourne, Australia


--

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:
http://public.kitware.com/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Setting properties to interface

Craig Scott-3


On Mon, Apr 17, 2017 at 5:04 AM, Tiago Macarios <[hidden email]> wrote:
Thanks Craig! That works. Just to confirm, there is no way to disable extensions for a single interface?

Not that I'm aware of.

 

On Sun, Apr 16, 2017 at 1:51 AM, Craig Scott <[hidden email]> wrote:
As per my other email just now, you should be able to achieve what you want with the new CMake 3.8.0 release:

add_library(a_lib INTERFACE)
target_compile_features(a_lib INTERFACE cxx_std_11)

I did a quick test with the above just now and it seems to work as expected. You may, however, still want to set the CXX_EXTENSIONS target property (or set it project wide with CMAKE_CXX_EXTENSIONS) to control whether or not compiler extensions are enabled too.



On Sun, Apr 16, 2017 at 12:45 PM, Tiago Macarios <[hidden email]> wrote:
Hi,

Given a template-only library exposed throw an interface is it possible to set the necessary CXX_STANDARD necessary to use the library? The code below would be what I am trying to do.

add_library(a_lib INTERFACE)

set_property(TARGET a_lib
    PROPERTY CXX_STANDARD 11
    PROPERTY CXX_STANDARD_REQUIRED ON
)

target_compile_definitions(a_lib INTERFACE
    SOME_DEF
)


Unfortunately, this does not work and fails with:

  INTERFACE_LIBRARY targets may only have whitelisted properties.
  The property "CXX_STANDARD_REQUIRED" is not allowed.

Any ideas?

Tiago

--

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:
http://public.kitware.com/mailman/listinfo/cmake



--
Craig Scott
Melbourne, Australia




--
Craig Scott
Melbourne, Australia

--

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:
http://public.kitware.com/mailman/listinfo/cmake