Касабланка с бустом 1.56 не работает из-за -Werror

Я пытаюсь собрать Casablanca с ускорением 1.56, но моя сборка продолжает давать сбои из-за того, что предупреждения об усилении превратились в ошибку из-за флага Casablanca -Werror

Например:

CXX=g++ BOOST_ROOT=${boost} cmake .. -DCMAKE_BUILD_TYPE=Release

Выдает такие ошибки, как (слишком много, чтобы показать)

/home/matt/workspace/opal2/o2linux64/Libs/boost/1.56/include/boost/system/error_code.hpp:222:36: error: ‘boost::system::errno_ecat’ defined but not used [-Werror=unused-variable]
 static const error_category &  errno_ecat     = generic_category();
                                ^
/home/matt/workspace/opal2/o2linux64/Libs/boost/1.56/include/boost/system/error_code.hpp:223:36: error: ‘boost::system::native_ecat’ defined but not used [-Werror=unused-variable]
 static const error_category &  native_ecat    = system_category();
                                ^
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/cpprest.dir/http/client/http_client_msg.cpp.o] Error 1

Кажется, я не могу найти какое-либо средство в Google, хотя я нашел сообщения, в которых люди строили с 1.56 и не упоминали об отключении Werror в src/CMakeList.txt (что, кстати, кажется, позволяет коду собираться)


person Matt    schedule 14.10.2015    source источник
comment
Упс. Я на самом деле не слишком хорошо это читал. Если это те предупреждения, не делайте буст с -Werror. Это не сработает.   -  person sehe    schedule 15.10.2015
comment
-Werror находится в файле Casablanca CMakeLists.txt. Он должен быть там по какой-то причине - или, скорее, было бы странно, если бы всем приходилось удалять его вручную. :С   -  person Matt    schedule 15.10.2015


Ответы (1)


Чтобы предотвратить редактирование файла CMakeLists.txt Casablanca, вы можете добавить параметр -DWERROR=OFF при запуске команды cmake, например:

cmake -DCMAKE_BUILD_TYPE=Release -DWERROR=OFF <path to src>

Обратите внимание, что cmake может кэшировать значения параметров, поэтому лучше перезапустить cmake в чистой директории сборки.

person Yuriy Pelykh    schedule 07.10.2016
comment
Прикольно, я не знал об этой опции. Я посмотрю, смогу ли я попытаться восстановить его сегодня, и, надеюсь, отмечу этот вопрос как ответ. Спасибо! - person Matt; 07.10.2016
comment
Эта опция была добавлена ​​2016-02-02 в соответствии с историей git, поэтому этот ответ бесполезен, если вы используете более раннюю версию репозитория. Вы можете увидеть эту опцию в верхней части файла Release/CMakeLists.txt. - person Yuriy Pelykh; 07.10.2016
comment
Ах, я вижу это. Это не в ветке master (на сегодняшний день), а в ветке prerelease-3.0.0. Полезно знать, я изменю свой скрипт сборки, чтобы установить его, как только я буду использовать версию 3, но до тех пор я застрял с запуском sed -i 's/-Werror//' Release/src/CMakeLists.txt Спасибо - person Matt; 18.10.2016
comment
Привет, Мэтт, да, к сожалению, этого исправления нет в мастере. Извини за это. Однако, если ваша цель состоит в том, чтобы предотвратить редактирование файлов cmake casablanca, у вас все еще есть вариант: запустить cmake с этим параметром: -DCMAKE_CXX_FLAGS="-isystem <boost include dir>" в моем случае это выглядит так: cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-isystem /home/user/proj/boost/include Заголовки Boost будут рассматриваться как системные заголовки (на самом деле они являются системными заголовками) и, таким образом, предупреждения о повышении будут подавлены. Это скорее хак, но у меня работает :) Если вас это устраивает, я могу обновить ответ - person Yuriy Pelykh; 20.10.2016
comment
примечание: это работает, потому что -isystem include остается позже, чем -я включаю, и, таким образом, перезаписывает его - person Yuriy Pelykh; 20.10.2016
comment
еще одно примечание: он был протестирован с компилятором gcc - person Yuriy Pelykh; 20.10.2016
comment
Мне всегда было интересно, что на самом деле сделал -isystem. Возможно, я не применю его к моей сборке Casablanca, но я думаю, что это может быть хорошим дополнением к моим сценариям сборки для нашего основного продукта. Сейчас я потратил много времени на то, чтобы внедрить прагмы подавления предупреждений, не зависящие от платформы, вокруг моих включений повышения, это могло бы решить эту проблему гораздо чище. - person Matt; 20.10.2016