Не удается отключить предупреждение в Visual C ++ - PullRequest
1 голос
/ 31 октября 2019

Мне нужно отключить все предупреждения из каталога проекта, который использует внешнюю библиотеку ProtocolBuffers, которая создает свои собственные предупреждения.

Вот некоторые из 151 предупреждений, которые я получаю:

my.pb.cc: warning C4512: 'google::protobuf::FatalException' : assignment operator could not be generated
my.pb.cc: warning C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data
my.pb.cc: warning C4125: decimal digit terminates octal escape sequence
my.pb.cc: warning C4127: conditional expression is constant
my.pb.cc
xutility(2132): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.

Где xutility - это включаемый файл Visual Studio.

Если я добавлю эти строки в мой файл CMakeLists.txt:

# Use a lower warning level threshold for autogenerated files
set(PROTOBUF_FILES_PATH "${CMAKE_CURRENT_BINARY_DIR}/src/*.pb.*")
file(GLOB PROTOBUF_FILES ${PROTOBUF_FILES_PATH})
set_source_files_properties(${PROTOBUF_FILES} PROPERTIES COMPILE_FLAGS /W2)

Я получу все предупреждения от моего сгенерированного pb.cc файлы отключены, но у меня осталось 15 предупреждений из внутреннего кода ProtoBuf, типа:

my.pb.cc
xutility(2132): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.

Как я могу отключить эти последние предупреждения, возможно, скорректировав свой файл CMakeLists.txt, добавив параметр -D_SCL_SECURE_NO_WARNINGS, только для файлов с расширением *.pb.*, учитывая, что я не могу изменить сам ProtoBuf?

1 Ответ

1 голос
/ 31 октября 2019

Не зная много о xutility или о том, как он используется Protobuf, я бы посоветовал попытаться расширить ваш set_source_files_properties() вызов, чтобы включить COMPILE_DEFINITIONS:

set_source_files_properties(${PROTOBUF_FILES} PROPERTIES 
    COMPILE_DEFINITIONS _SCL_SECURE_NO_WARNINGS 
    COMPILE_FLAGS /W2
)
...