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





6 Answers

El comando CMake target_compile_features() se usa para especificar la función de C ++ requerida cxx_range_for . CMake entonces inducirá el estándar C ++ que se utilizará.

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 usar add_definitions(-std=c++11) o modificar la variable CMake CMAKE_CXX_FLAGS , porque CMake se asegurará de que el compilador de C ++ se invoque con los indicadores de línea de comando apropiados.

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

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

Véase también mi respuesta más detallada .

c++11 cmake

Cuando intento ejecutar el makefile generado por CMake para compilar mi programa, aparece el error que

el rango basado en bucles no se admite en el modo C ++ 98.

Intenté 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 características de C ++ 11 usando CMake.




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

 set_property(TARGET tgt PROPERTY CXX_STANDARD 11)

Vea la documentación de CMake para más detalles.




La forma más fácil:

add_compile_options(-std=c++11)




Lo que me funciona es establecer la siguiente línea en tu CMakeLists.txt:

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

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




Creo que solo estas dos líneas son suficientes.

set(CMAKE_CXX_STANDARD 11)

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



Relacionados con OS X y Homebrew LLVM:

¡No olvides llamar a cmake_minimum_required (VERSION 3.3) y project () después de eso!

O CMake insertará project() implícitamente antes de la línea 1, lo que causará problemas con la detección de la versión Clang y posiblemente otros tipos de problemas. Aquí hay un tema relacionado .






Related


Tags

c++11   cmake