[c++11] ¿Cómo activar C ++ 11 en CMake?


4 Answers

El comando CMake target_compile_features() se usa para especificar la característica requerida de C ++ cxx_range_for . CMake inducirá el uso del estándar C ++.

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
add_executable(foobar main.cc)
target_compile_features(foobar PRIVATE cxx_range_for)

No es necesario utilizar add_definitions(-std=c++11) o modificar la variable CMake CMAKE_CXX_FLAGS , porque CMake se asegurará de que el compilador C ++ se invoque con los indicadores de línea de comando apropiados.

Tal vez su programa C ++ utiliza otras características de C ++ que cxx_range_for . La propiedad global de CMake CMAKE_CXX_KNOWN_FEATURES enumera las características de C ++ que puede elegir.

En lugar de utilizar target_compile_features() también puede especificar explícitamente el estándar C ++ configurando las propiedades CMake CXX_STANDARD y CXX_STANDARD_REQUIRED para su destino CMake.

Ver también mi respuesta más detallada .

Question

Cuando trato de ejecutar CMake generado makefile para compilar mi programa, obtengo el error que

el rango basado en bucles no es compatible con el modo C ++ 98.

Traté de agregar add_definitions(-std=c++0x) a mi CMakeLists.txt , pero no ayudó. Intenté esto también:

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-std=gnu++0x)
endif()

Cuando hago g++ --version , obtengo:

g ++ (Ubuntu / Linaro 4.6.1-9ubuntu3) 4.6.1

También probé SET(CMAKE_CXX_FLAGS "-std=c++0x") , que tampoco funciona.

No entiendo cómo puedo activar las funciones de C ++ 11 usando CMake.




Lo que funciona para mí es establecer la siguiente línea en su CMakeLists.txt:

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

Al establecer este comando se activan las características de C ++ 11 para el compilador y después de ejecutar el comando cmake .. , usted debería poder usar el range based for loops en su código y compilarlo sin ningún error.




La forma más fácil de establecer el estándar cxx es

 set_property(TARGET tgt PROPERTY CXX_STANDARD 11)

Ver cmake doc para más detalles.




OSX y relacionados con LLVM caseros:

¡No olvide llamar a cmake_minimum_required (VERSIÓN 3.3) y project () después de esto!

O bien, cmake insertará el proyecto () implícitamente antes de la línea 1, causando problemas con la detección de la versión clang y posiblemente otros tipos de problemas. Aquí hay un problema relacionado




La forma más fácil:

add_compile_options(-std=c++11)




Related



Tags

c++11   cmake