On 04/21/2014 02:42 PM, Stephen Kelly wrote:
> Brad King wrote:
> 
>> Later CMake learns about the -std=c++11 flag for that compiler and
>> honors the CXX_STANDARD request by passing it.  Now the compiler
>> has its extensions disabled and the project fails to build.  This
>> was due to an update in CMake, not the project.
> 
> Is the same problem present with CMAKE_*_COMPILE_OPTIONS_{PIE,PIC,DLL} ?

Yes, but that is less fundamental than the language standard level.

>> We need a way for a project to say that it should not build unless
>> CMake knows how to nominally enable support for the given language
>> level.  
> 
> This requirement is inconsistent with what people keep asking me for (namely 
> something like what the qmake CONFIG += c++11 does - enable a c++11 flag if 
> known, and do nothing if not), and is inconsistent with the decay- topic.

Yes, and the CXX_STANDARD property in the decay- topic satisfies this
use case.  We just need another interface to specify that the standard
request is a strict requirement.

> I think it be determined with code equivalent to 
> 
>  if (target->GetProperty("CXX_STANDARD" == std::string("11")
>    && !makefile->GetDefinition("CMAKE_CXX11_STANDARD_COMPILE_OPTION"))
>    {
>    // FATAL_ERROR
>    }

Yes, so long as we set CMAKE_CXX11_STANDARD_COMPILE_OPTION to an empty
string on the compilers that support C++11 by default, like VS 12 (2013).

> We would need to know the compile options of compilers supported by existing 
> versions of CMake, and ensure that the option is recorded for new 
> CompilerIds and new releases of existing compiler ids too.

Yes, but for projects that have this requirement it is better to fail
due to a missing setting in CMake than work accidentally and fail later
when CMake is updated.  Even with a missing setting in CMake it will
typically be possible to work around it locally by adding the setting
to the cache.

> However, I guess two different interfaces are needed if you want to ensure 
> the 'require some notion of C++11' concept.

Perhaps another boolean property like CXX_STANDARD_REQUIRED would work.

Thanks,
-Brad

-- 

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/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to