cmake设置C++编译器警告方法以及编译器警告详细介绍

编译器警告介绍:

编译器警告是编译器在编译代码时发出的警告,它表示代码中存在潜在的错误或问题。编译器警告不是错误,编译器仍然会生成可执行文件,但警告表示代码可能存在问题,需要开发人员注意。

编译器警告需要是因为代码中存在潜在的错误或问题,如果不及时发现和解决,可能会导致程序运行时崩溃、数据丢失或其他问题。编译器警告可以帮助开发人员在代码编写阶段发现这些潜在的问题,从而提高代码的质量和可靠性。

建议在开发过程中使用 -Wall-Wextra 来启用所有标准警告。如果需要进一步提高代码的质量和安全性,可以使用 -Wpedantic 来启用更加严格的警告。
在这里插入图片描述

msvc (微软编译器)

/W4 编译器的一个选项,它将启用所有标准警告,并将一些额外的警告设置为默认启用。/W4 可以帮助开发人员发现代码中潜在的错误和问题,提高代码的质量和可靠性。

具体的,/W4 将启用以下警告:

  • 所有标准警告

  • 所有额外警告

  • 一些更加严格的警告

    ,例如:

    • 不符合 C 或 C++ 标准的代码
    • 可能导致意外行为的代码
    • 可能导致代码难以维护的代码

/permissive-

/permissive- 是 微软 编译器的一个选项,它将禁用一些 Microsoft 扩展。/permissive- 可以帮助开发人员遵循 C 或 C++ 标准,提高代码的可移植性。

具体的,/permissive- 将禁用以下警告:

  • Microsoft 扩展警告

    ,例如:

    • -Wsign-compare:警告比较操作符的两侧类型不同,但结果可能会是相同的。
    • -Wswitch-enum:警告 switch 语句的枚举类型中没有所有枚举值。

使用建议

建议在开发过程中使用 /W4 来启用所有标准警告,并使用 /permissive- 来禁用 Microsoft 扩展。这样可以帮助开发人员发现代码中潜在的错误和问题,提高代码的质量、可靠性和可移植性。

以下是一些具体的使用建议:

  • 在开发的早期阶段,使用 /W4 来发现代码中潜在的错误。
  • 在开发的后期阶段,使用 /W4/permissive- 来进一步提高代码的质量和可靠性。
  • 在生产环境中,使用 /W4/permissive- 来确保代码的稳定性。

clang和gcc编译器警告介绍

以下是关于 -Wall、-Wextra 和 -Wpedantic 的介绍:

-Wall

-Wall 是 GCC 和 Clang 编译器的一个选项,它将启用所有标准警告。标准警告包括:

  • 未初始化变量
  • 未使用的变量
  • 未定义的符号
  • 类型不匹配
  • 可能导致错误的操作

-Wall 可以帮助开发人员发现代码中潜在的错误,提高代码的质量。

-Wextra

-Wextra-Wall 的一个扩展,它将启用一些额外的警告。这些额外的警告包括:

  • 未使用的函数参数
  • 未使用的局部变量
  • 可能导致性能下降的操作
  • 可能导致安全问题的操作

-Wextra 可以帮助开发人员发现代码中潜在的问题,提高代码的性能和安全性。

-Wpedantic

-Wpedantic-Wall-Wextra 的一个扩展,它将启用一些更加严格的警告。这些警告包括:

  • 不符合 C 或 C++ 标准的代码
  • 可能导致意外行为的代码
  • 可能导致代码难以维护的代码

-Wpedantic 可以帮助开发人员遵循 C 或 C++ 标准,提高代码的可维护性。

使用建议

建议在开发过程中使用 -Wall-Wextra 来启用所有标准警告。如果需要进一步提高代码的质量和安全性,可以使用 -Wpedantic 来启用更加严格的警告。

以下是一些具体的使用建议:

  • 在开发的早期阶段,使用 -Wall-Wextra 来发现代码中潜在的错误。
  • 在开发的后期阶段,使用 -Wpedantic 来进一步提高代码的质量和安全性。
  • 在生产环境中,使用 -Wall-Wextra 来确保代码的稳定性。

cmake设置编译器警告方法

function(target_set_warnings TARGET ENABLED ENABLED_AS_ERRORS)
    if (NOT ${ENABLED})
        message(STATUS "Warnings Disabled for: ${TARGET}")
        return()
    endif()

    set(MSVC_WARNINGS
        /W4
        /permissive-)

    set(CLANG_WARNINGS
        -Wall
        -Wextra
        -Wpedantic)

    set(GCC_WARNINGS
        ${CLANG_WARNINGS})

    if(${ENABLED_AS_ERRORS})
        set(MSVC_WARNINGS ${MSVC_WARNINGS} /WX)
        set(CLANG_WARNINGS ${CLANG_WARNINGS} -Werror)
        set(GCC_WARNINGS ${GCC_WARNINGS} -Werror)
    endif()

    if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
        set(WARNINGS ${MSVC_WARNINGS})
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        set(WARNINGS ${CLANG_WARNINGS})
    elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
        set(WARNINGS ${GCC_WARNINGS})
    endif()

    target_compile_options(${TARGET} PRIVATE ${WARNINGS})
    message(STATUS ${WARNINGS})
endfunction(target_set_warnings)

  • 使用方法:
# 设置cmake模块的路径,存放上面函数的脚本名称为 enableWraning.txt,存放在cmake目录下:
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
# 引入cmake的模块(xx.txt, xx就是模块名字)
include(enableWraning)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早睡的叶子

你的鼓励就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值