У меня есть проект, над которым я работаю некоторое время, всегда в отладке.
Сегодня я попытался создать релиз, и он не может скомпилировать, выдав несколько очень странных ошибок.
Пока отладка компилируется без каких-либо предупреждений, команда 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. Это специально?
Могу поспорить, что проблема исходит из этой строки:
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=gnu++11 -Wall")
Смотри, ты установил переменную CMAKE_CSS_FLAGS_RELEASE
, Скорее всего, вы просто хотели установить переменную CMAKE_CXX_FLAGS_RELEASE
вместо. Это объясняет, почему ваш c ++ 11 не включен в режиме выпуска.
Я исправил проблему, просто удалив CXX_FLAG и используя определения добавления CMake:
add_definitions("-std=gnu++11")
Я не знаю, почему это заставило это работать, и почему отладка работала, но релиз не сделал, но это имело большое значение.