GCC C ++ 11 Отладка сборок, сбой выпуска

У меня есть проект, над которым я работаю некоторое время, всегда в отладке.
Сегодня я попытался создать релиз, и он не может скомпилировать, выдав несколько очень странных ошибок.
Пока отладка компилируется без каких-либо предупреждений, команда release:

/usr/include/c++/4.7/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

В обеих сборках CMake включен c ++ 11:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=gnu++11 -Wall -g")
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")

Как я могу отследить, что вызывает ошибки компиляции в Release?

РЕДАКТИРОВАТЬ Я использую Cmake 2.8 и пытался скомпилировать с gcc-4.6.3 и 4.7.2, и оба имеют ту же проблему.

EDIT # 2 Проблема сохраняется при использовании -std = c ++ 0x вместо c ++ 11.

EDIT # 3 Переход на g ++ 4.6 не сильно помог. Ошибка теперь просто изменилась на:

/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:etc...

EDIT # 4 Я удалил <thread> который первым вызвал проблемы. Тогда было <mutex> а также <atomic>, Теперь это любой кусок кода, который использует std::shared_ptr<Blah>,
Мне кажется, что Release вообще не хочет компилировать с C ++ 11. Это специально?

1

Решение

Могу поспорить, что проблема исходит из этой строки:

set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")

Смотри, ты установил переменную CMAKE_CSS_FLAGS_RELEASE, Скорее всего, вы просто хотели установить переменную CMAKE_CXX_FLAGS_RELEASE вместо. Это объясняет, почему ваш c ++ 11 не включен в режиме выпуска.

2

Другие решения

Я исправил проблему, просто удалив CXX_FLAG и используя определения добавления CMake:

add_definitions("-std=gnu++11")

Я не знаю, почему это заставило это работать, и почему отладка работала, но релиз не сделал, но это имело большое значение.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector