2015-08-26 3 views
2

На станции Red Hat Linux, я использую devtoolset2 давая следующую команду:nullptr непризнанным с GCC 4.8

scl enable devtoolset-2 bash 

Затем, когда я называю Gcc --version, я получаю:

gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15) Copyright (C) 2013 Free Software Foundation, Inc.

Но если я скомпилировать свою программу (malkefile генерироваться с CMake, добавив строку:

if(UNIX) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11") 
endif() 

У меня есть следующее сообщение об ошибке:

cc1plus: error: unrecognized command line option "-std=c++11" 

И если я компилирую замена -std = C++ 11 по -std = C++ 0x тогда, я получаю эти сообщения:

nullptr wasnt declared in this scope. 

Как nullptr не может быть распознан, учитывая, что это ключевое слово?

Я не понимаю, если у вас есть какие-либо идеи ...

+1

согласно [this] (https://gcc.gnu.org/projects/cxx0x.html) 'nullptr' поддерживается с версии 4.6 – NathanOliver

+2

' cc1plus: ошибка: непризнанная опция командной строки "-std = C++ 11 "' <- cc1plus is not g ++ – C0deH4cker

+1

Вы уверены, что cmake использует правильную версию gcc? – interjay

ответ

4

Вы не вызывающую GCC 4.8.2.

Либо есть что-то не так с вашей конфигурации CMake, или есть что-то не так с вашей SCL вызова или gcc -v дает различный ответ на g++ -v (в этом случае, проверьте содержимое набора инструментов).

Но nullptr не доступен, и -std=c++0x принимается, но не -std=c++11, все предлагают GCC 4.3, 4.4 или 4.5.

Одна вещь, которую вы можете попробовать, - удалить файл CMakeCache.txt из вашего корня сборки, который может содержать кэшированные свойства вашей предыдущей среды.

В противном случае включите подробный вывод, чтобы вы могли действительно посмотреть, что происходит, какие двоичные файлы вызывается и как.

+0

Большое спасибо за ваш ответ. Кэш CMake не изменяет ничего. Я попытался установить CMAKE_COMPILER_IS_GNUCXX в true, чтобы выполнить g ++, но безуспешно. –

+0

Я попытался запустить многословный, установив CMAKE_VERBOSE_MAKEFILE в положение ON, но он не работает. Вы точно знаете, как мы это делаем? Спасибо –

+0

Мне также нужно добавить, что в сгенерированном Makefile он написан VERBOSE = 1, но в CMakeCache.txt у меня есть: CMAKE_VERBOSE_MAKEFILE: BOOL = OFF и больше информации о компиляторе или smtg ... –