5

我将 CMake 与 qt 一起使用,说:

find_package(Qt5 COMPONENTS Widgets)

另外,我想使用高警告级别,并且我想将警告视为错误。所以我使用:

set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra" )

但是,我不关心我使用的库中的警告。因此,例如,要SYSTEMinclude_directories调用中添加我预先添加的 boost,这样我就不会被来自外部库的警告所困扰:

include_directories(SYSTEM ${Boost_INCLUDE_DIR} )

但这不适用于 qt,因为没有明确的 include_directories声明可以在其中添加SYSTEM.

有什么我可以做的吗?我只在这里找到了对该功能的请求: http ://www.itk.org/Bug/print_bug_page.php?bug_id=8710

4

1 回答 1

4

这里最简单的解决方案是基于每个文件而不是全局设置警告级别CMAKE_CXX_FLAGS。这样,只有您自己的代码会获得更高的警告级别,而您不必关心第三方代码。

您可以使用该COMPILE_FLAGS属性,该属性既可用作目标属性,也可用作文件属性:

set_property(TARGET <your_target_goes_here> 
             APPEND PROPERTY COMPILE_FLAGS "-Werror -Wall -Wextra")

缺点是您必须为每个目标重复此行,因此为方便起见,您可能希望将其包装到 CMake 函数中。

如果您使用的是 CMake 版本 3 或更高版本,则应使用target_compile_options而不是手动设置属性:

target_compile_options(<your_target_goes_here> PRIVATE -Werror -Wall -Wextra)
于 2013-09-25T09:11:00.343 回答