2012-01-20 20 views
14

Al usar clang ++, ¿cómo puedo hacer que CMake utilice el indicador -std=c++0x al compilar, pero no cuando se vincula?CMake clang y C++ 0x

Hay muchas otras publicaciones relacionadas con el uso de clang como compilador, pero no he encontrado ninguna pista para establecer el estándar de C++.

Aquí es lo que he intentado:

CMakeLists.txt:

project(test) 
add_executable(main main.cxx) 

ClangOverride.txt:

SET (CMAKE_C_FLAGS_INIT    "-Wall -std=c99") 
SET (CMAKE_C_FLAGS_DEBUG_INIT   "-g") 
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT  "-Os -DNDEBUG") 
SET (CMAKE_C_FLAGS_RELEASE_INIT  "-O3 -DNDEBUG") 
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") 

SET (CMAKE_CXX_FLAGS_INIT    "-Wall -std=c++0x -stdlib=libc++") 
SET (CMAKE_CXX_FLAGS_DEBUG_INIT   "-g") 
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT  "-Os -DNDEBUG") 
SET (CMAKE_CXX_FLAGS_RELEASE_INIT  "-O3 -DNDEBUG") 
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") 
SET (CMAKE_EXE_LINKER_FLAGS_INIT   "") 

main.cxx:

int main(){ return 0; } 

comando utilizado para invocar cmake

CC=clang CXX=clang++ cmake .. -DCMAKE_USER_MAKE_RULES_OVERRIDE=ClangOverride.txt -DCMAKE_BUILD_TYPE=Release 

La construcción del proyecto:

VERBOSE=1 make 

Este invocarán los dos comandos siguientes:

/usr/bin/clang++ -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG -o CMakeFiles/main.dir/main.cxx.o -c /tmp/asdf/main.cxx 
/usr/bin/clang++ -Wall -std=c++0x -stdlib=libc++ -O3 -DNDEBUG CMakeFiles/main.dir/main.cxx.o -o main -rdynamic 

El comando segundos resultados en materia de alerta ya que si la bandera de la ONU-utilizada: -std = C++ 0x

clang: warning: argument unused during compilation: '-std=c++0x' 
CMakeFiles/main.dir/main.cxx.o: file not recognized: File format not recognized 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

¿Cómo puedo evitar esto?

+0

Hmm, AFAIK, CMake no debería usar el controlador del compilador para vincular archivos de objetos. ¿Qué es la cosa 'CMAKE_USER_MAKE_RULES_OVERRIDE'? – arrowd

Respuesta

10

Utilice ADD_DEFINITIONS ("- std = C++ 0x") en lugar de establecer indicadores CXX.

+3

¿Qué pasa si algún código usa el compilador de C? – Timothy003

+1

Si no desea que esta opción aparezca en C objetivos, debe configurarla en CMAKE_CXX_FLAGS. – belkiss

+0

¿Qué es esto? ¿Dónde tengo que ponerlo? –