Как установить уровень предупреждения в CMake? - PullRequest
92 голосов
/ 03 марта 2010

Как установить уровень предупреждения для проекта (не все решение), используя CMake ? Должен работать на Visual Studio и GCC .

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

Ответы [ 4 ]

83 голосов
/ 29 сентября 2010

ОБНОВЛЕНИЕ: Этот ответ предшествует эре современного CMake. Каждый здравомыслящий пользователь CMake должен воздерживаться от прямого использования CMAKE_CXX_FLAGS и вместо этого вызывать команду target_compile_options. Проверьте ответ mrts , в котором представлены рекомендуемые рекомендации.

Вы можете сделать что-то похожее на это:

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()
38 голосов
/ 15 июня 2018

В современном CMake хорошо работает следующее:

if(MSVC)
  target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
  target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()

Заменить ${TARGET_NAME} на фактическое имя цели. -Werror является необязательным, он превращает все предупреждения в ошибки.

Или используйте add_compile_options(...), если хотите применить его ко всем целям, как предложено @aldo в комментариях.

23 голосов
/ 24 июня 2014

Некоторые Модули 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:

  • Установить CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION Атрибут XCode (он же Настройки сборки -> предупреждения -> подозрительные неявные преобразования -> ДА )
  • Добавить флаг компилятора: -Werror

Makefile gcc и clang:

  • Добавить флаги компилятора: -Wconversion, -Werror

Visual studio:

  • Добавить флаги компилятора: /WX, /w14244

Ссылки

7 голосов
/ 03 марта 2010

Вот лучшее решение, которое я нашел на данный момент (включая проверку компилятора):

if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
    add_definitions(/W2)
endif()

Это установит уровень предупреждения 2 в Visual Studio. Я полагаю, что с -W2 это будет работать и в GCC (не проверено).

Обновление от @Williams: должно быть -Wall для GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...