Red de conocimiento informático - Material del sitio web - Cómo escribir cmake para incluir características de C++11

Cómo escribir cmake para incluir características de C++11

g++ 4.8.2

cmake 2.8

Anteriormente, cuando escribía cmkae para compilar funciones de c++11, usaba esta línea:

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

Pero siempre obtengo cc1plus: error: se informa la opción de línea de comando no reconocida "-std=c++11" .

Por lo tanto, set(QMAKE_CXXFLAGS "-std=c++11") o configuraciones similares no funcionarán.

Más tarde me di cuenta de que std=c++11 no era compatible con versiones anteriores.

ok

Pruebe el nuevo método de escritura directamente:

#CMakeLists.txt

proyecto(prueba)

cmake_minimum_required (VERSIÓN 2.8)

aux_source_directory(.SRC_LIST)

add_executable(${PROJECT_NAME}${SRC_LIST})< / p>

include(CheckCXXCompilerFlag)

CHECK_CXX_COMPILER_FLAG("-.std =c++11" COMPILER_SUPPORTS_CXX11)

CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X )

if(COMPILER_SUPPORTS_ CXX11)

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

elseif(COMPILER_SUPPORTS_CXX0X)

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

else()

message(STATUS "El compilador ${CMAKE_CXX_COMPILER} no está compatible con C++ 11. Utilice otro compilador de C++.

")

endif()

Prueba el código c++11

//test.CC

usando el espacio de nombres std; p>

int main()

{

const std::vectorv(1);

auto a = v [0 ];//a es tipo int

cout <& lt; "a:"<<

decltype(v[0]) b = 0; //b es const int& tipo, que es el tipo de retorno de std::vector<:int>:: operator[] (size_type) const

auto c = 0;//c es int type

p>

auto d = c;//d es int type

decltype(c) e;//e es int type, es decir, el tipo de entidad c

decltype( (c)) f = e;//f es de tipo int& porque (c) es un valor l

decltype(0) g;//g es de tipo; int porque 0 es un rvalue

return 0;

}

Por lo tanto, diferentes versiones de gcc establecen diferentes indicadores para especificar la compatibilidad con c++11, a saber:

f = e;//f es de tipo int& e., el programa anterior determinará qué versión de salida de g++ usar en esta máquina