我通过说将 CMake 与 qt 一起使用:
find_package(Qt5 COMPONENTS Widgets)
Run Code Online (Sandbox Code Playgroud)
另外,我想使用高警告级别,并且我想将警告视为错误。所以我使用:
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra" )
Run Code Online (Sandbox Code Playgroud)
但是,我不关心我使用的库中的警告。因此,例如,要SYSTEM在include_directories调用中包含 boost ,我就不会受到来自外部库的警告的困扰:
include_directories(SYSTEM ${Boost_INCLUDE_DIR} )
Run Code Online (Sandbox Code Playgroud)
但这对 qt 不起作用,因为没有明确的 include_directories声明可以在前面加上SYSTEM.
有什么我可以做的吗?我只在这里找到了对该功能的请求:http : //www.itk.org/Bug/print_bug_page.php?bug_id=8710
这里最简单的解决方案是基于每个文件而不是全局设置警告级别CMAKE_CXX_FLAGS。这样,只有您自己的代码才会获得更高的警告级别,而您不必关心第三方代码。
您可以使用该COMPILE_FLAGS属性,该属性可用作目标属性和文件属性:
set_property(TARGET <your_target_goes_here>
APPEND PROPERTY COMPILE_FLAGS "-Werror -Wall -Wextra")
Run Code Online (Sandbox Code Playgroud)
缺点是您必须为每个目标重复此行,因此为了方便起见,您可能希望将其包装到 CMake 函数中。
如果您使用的是 CMake 版本 3 或更高版本,则应该使用target_compile_options而不是手动设置属性:
target_compile_options(<your_target_goes_here> PRIVATE -Werror -Wall -Wextra)
Run Code Online (Sandbox Code Playgroud)