在cmake调试版本中未检测到GCC警告,但在发布版本中检测到了GCC警告

时间:2019-07-17 18:54:52

标签: c gcc cmake

我有一个gcc / -Werror项目,其中启用了多个警告和标志cmake

我注意到,当我使用-DCMAKE_BUILD_TYPE=Release标志cmake时会检测到一些警告,但是当我不应用以上error: ‘var_name’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 标志时却未检测到。 例如,以下警告之一是:

CMAKE_C_FLAGS

我在这里阅读:Set CFLAGS and CXXFLAGS options using CMake,有多个CMAKE_C_FLAGS_RELEASE变量用于不同的构建类型,例如PartitionKey

我试图将这些变量应用于发行版和调试版,但是这次以上都没有检测到我期望的警告。

我缺少什么?

1 个答案:

答案 0 :(得分:2)

CMake的默认/“调试”构建配置文件完全禁用了优化,从而阻止了编译器执行转换和进行静态分析(确定使用未初始化的变量)所需的遍历。虽然在某种程度上可以改善单步源代码行的调试体验,但是您已经发现它隐藏了警告,并且还倾向于隐藏代码中未定义行为的后果。

传统上,“完全禁用非发行版的优化”在面向Unix的开发人员中并不是一件容易的事。这是MSVC世界中常见做法的产物,反映了CMake的起源和用户群。