【问题标题】:How to set different warning levels for different files?如何为不同的文件设置不同的警告级别?
【发布时间】:2020-02-23 16:16:26
【问题描述】:

虽然我可以根据编译器设置不同的警告级别,例如:

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

我无法逐个文件地设置它们。

在同一目录中,我有一组文件,其名称位于 ${SRC_WARN} CMake 变量中,与其他文件相比,它们需要不同的警告级别。

有没有办法用target_compile_options指定这样的条件?

【问题讨论】:

    标签: cmake compiler-warnings warning-level


    【解决方案1】:

    您可以使用 set_source_files_properties() 为单个文件(或文件组)设置编译选项 (COMPILE_OPTIONS)。您可以通过添加到现有 CMake 代码中来更改 ${SRC_WARN} 源文件的 COMPILE_OPTIONS

    if(MSVC)
      target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
      # Change these files to have warning level 2.
      set_source_files_properties(${SRC_WARN} PROPERTIES COMPILE_OPTIONS /W2)
    else()
      target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
      # Change these files to inhibit all warnings.
      set_source_files_properties(${SRC_WARN} PROPERTIES COMPILE_OPTIONS -w)
    endif()
    

    【讨论】:

    • 应该/我可以使用 PRIVATE 令牌来指定这是一个本地属性吗?
    • COMPILE_OPTIONS 还是COMPILE_FLAGS
    • 您不能将 PUBLICPRIVATE 等可见性限定符与 set_source_file_properties() 命令一起使用。这些属性将仅应用于那些源文件,并且仅对添加到同一 CMakeLists.txt 文件中的目标可见。根据文档,您应该使用较新的COMPILE_OPTIONSCOMPILE_FLAGS 属性是旧属性。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多