如何在Qt Creator中为Clang静态分析器设置语言标准(-std)

时间:2016-08-17 16:08:36

标签: c cmake clang qt-creator clang-static-analyzer

我使用QtCreator作为IDE和CMake进行构建,在C中编写项目。 QtCreator ver。 > = 4.0.0包括我尝试使用的Clang静态分析器。

在我的CMakeLists.txt中设置:

set(CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")

当我在控制台中启动分析时获取错误:

error: invalid argument '-std=gnu++11' not allowed with 'C/ObjC'

如何将'-std = gnu99'传递给clang分析器?也许它在QtCreator插件源代码中是硬编码的?

UDP1 :好像是QtCreator错误:https://bugreports.qt.io/browse/QTCREATORBUG-16290

2 个答案:

答案 0 :(得分:3)

@Petesh在答案中给出了经典的方法。

如果您只想指定编译器应遵守的确切C标准版本,请使用全局变量CMAKE_C_STANDARDCMAKE_C_STANDARD_REQUIRED

在你的情况下

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
然后,CMake将自己确定检测到的编译器的确切命令选项,并将它们添加到编译器的所有调用中。

要覆盖特定目标的此全局设置,请修改相应的目标属性:

set_target_properties(myTarget
                      PROPERTIES C_STANDARD 11
                                 C_STANDARD_REQUIRED ON)

官方CMake文档中描述了编译功能选项的深入描述:target compile features。通过这些编译功能,它还可以要求检测到的编译器支持一组独立于语言标准的特定语言功能:

target_compile_features(myTarget
                        PUBLIC c_variadic_macros  # ISO/IEC 9899:1999
                        PRIVATE c_static_assert   # ISO/IEC 9899:2011
)

答案 1 :(得分:2)

变量CMAKE_C_FLAGS适用于C代码,而不适用于C++代码。您应该将其添加到CMAKE_CXX_FLAGS

set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")

并保留-std=gnu99代码,您可以添加:

set(CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")