CMAKE的C 覆盖范围设置



我有有时可能会使用clang的cmake项目,有时可能会使用GCC,有时可能会使用MSVC。Cmake是否提供了一些通用方法来启用覆盖范围,或者如果我自己剩下的话,我需要做(GCC和Clang的编译器标志不同,而MSVC没有覆盖范围)?

没有中央cmake可以处理这种情况,但是某些解决方案可能是:

  • 什么也不做。使用kcov收集覆盖范围统计信息,该统计不需要特殊的编译器标志。
  • 与通常的DebugRelWithDebugInfo等一起添加构建配置。然后,仅在有意义的情况下选择此构建配置,即使用clanggcc编译时。这样:

    set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
        "Build options: None Debug Release RelWithDebInfo MinSizeRel Coverage." FORCE)
    # Use generator expression to enable flags for the Coverage profile
    target_compile_options(yourExec
        $<$<CONFIG:COVERAGE>:--coverage>)
    # Don't forget that the linker needs a flag, too:
    target_link_libraries(yourExec
        PRIVATE $<$<CONFIG:COVERAGE>:--coverage>)
    

    当您需要在编译器类型上进一步派遣时,也可以使用发电机表达式。

    $<$<OR:$<CXX_COMPILER_ID:AppleClang>,
        $<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:-someOtherFlag>
    

    ,但据我所知,clanggcc之间没有真正的差异。

  • 不要添加其他构建配置,只需为打算用于覆盖范围报告的构建配置定义上述标志,可能是Debug。然后,显然有必要排除MSVC

    target_compile_options(yourExec
        $<$<AND:$<CONFIG:DEBUG>,$<NOT:CXX_COMPILER_ID:MSVC>>:--coverage>)
    target_link_libraries(yourExec
        PRIVATE $<$<AND:$<CONFIG:DEBUG>,$<NOT:CXX_COMPILER_ID:MSVC>>:--coverage>)
    

最新更新