使用CMake将qt头文件声明为系统头文件

5

我使用CMake和qt,代码如下:

find_package(Qt5 COMPONENTS Widgets)

另外,我想使用高警告级别,并将警告视为错误。因此,我使用以下代码:

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

然而,我并不关心我使用的库中的警告。 例如,为了包含boost,我在include_directories调用中前置SYSTEM,这样我就不会被外部库的警告所困扰:

include_directories(SYSTEM ${Boost_INCLUDE_DIR} )

但是这对于qt并不起作用,因为没有明确的 include_directories 语句,我可以在其中添加 SYSTEM。 有什么办法可以解决这个问题吗? 我只在这里找到了一个关于该功能的请求: http://www.itk.org/Bug/print_bug_page.php?bug_id=8710
2个回答

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
target_compile_options(<your_target_goes_here> PRIVATE -Werror -Wall -Wextra)

0
这是另一种更简单的解决方案,使用CMake版本3和Qt6(根据您的需求进行调整):
find_package(Qt6 COMPONENTS Quick REQUIRED)

add_executable(main main.cpp)
target_compile_options(main PRIVATE -Werror -Wall -Wextra)

# Mark Qt6 include directories as SYSTEM include directories
target_include_directories(main SYSTEM PRIVATE ${Qt6Quick_INCLUDE_DIRS})

target_link_libraries(main PRIVATE Qt6::Quick)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接