4 ответов:
вы можете сделать что-то похожее на это:
if(MSVC) # Force to always compile with W4 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) # Update if necessary set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") endif()
некоторые CMake модули я написал включить экспериментальную кроссплатформенный предупреждение, пресечение:
sugar_generate_warning_flags( target_compile_options target_properties ENABLE conversion TREAT_AS_ERRORS ALL ) set_target_properties( foo PROPERTIES ${target_properties} COMPILE_OPTIONS "${target_compile_options}" )результат для Xcode:
- Set
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSIONатрибут Xcode (ака параметры построения ->предупреждения ->подозрительные неявные преобразования ->да)- добавить флаг компилятора:
-WerrorMakefile gcc и лязг:
- добавить флаги компилятора:
-Wconversion,-WerrorVisual studio:
- добавить флаги компилятора:
/WX,/w14244ссылки
здесь-это лучшее решение я нашел до сих пор (включая проверку):
if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)") add_definitions(/W2) endif()это установит уровень предупреждения 2 в Visual Studio. Я полагаю, с
-W2он будет работать и в GCC (непроверенный).обновление от @Williams: это должно быть
-Wallдля GCC.
в современном CMake хорошо работает следующее:
if(MSVC) target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX) else(MSVC) target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror) endif(MSVC)заменить
${TARGET_NAME}с фактическим именем цели.-Werrorявляется необязательным, он превращает все предупреждения в ошибки.
Comments