我使用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
答案 0 :(得分:3)
@Petesh在答案中给出了经典的方法。
如果您只想指定编译器应遵守的确切C标准版本,请使用全局变量CMAKE_C_STANDARD
和CMAKE_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}")