@@ -333,12 +333,18 @@ function(target_code_coverage TARGET_NAME)
333333 if (target_type STREQUAL "SHARED_LIBRARY" AND target_code_coverage_ALL)
334334 if (CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang"
335335 OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang" )
336- add_custom_target (
337- ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
336+ add_custom_command (
337+ OUTPUT
338+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
338339 COMMAND
339340 ${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME} >" >
340341 ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
341342 DEPENDS ${TARGET_NAME} )
343+ add_custom_target (
344+ ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
345+ DEPENDS
346+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
347+ )
342348
343349 if (NOT TARGET ccov-libs)
344350 message (
@@ -374,8 +380,8 @@ function(target_code_coverage TARGET_NAME)
374380 # Run the executable, generating raw profile data Make the run data
375381 # available for further processing. Separated to allow Windows to run this
376382 # target serially.
377- add_custom_target (
378- ccov-run- ${target_code_coverage_COVERAGE_TARGET_NAME}
383+ add_custom_command (
384+ OUTPUT ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw
379385 COMMAND
380386 ${CMAKE_COMMAND} -E env ${CMAKE_CROSSCOMPILING_EMULATOR}
381387 ${target_code_coverage_PRE_ARGS}
@@ -384,22 +390,27 @@ function(target_code_coverage TARGET_NAME)
384390 COMMAND
385391 ${CMAKE_COMMAND} -E echo "-object=$<TARGET_FILE:${TARGET_NAME} >"
386392 ${LINKED_OBJECTS} >
387- ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/$$ {target_code_coverage_COVERAGE_TARGET_NAME}
393+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/${target_code_coverage_COVERAGE_TARGET_NAME}
388394 COMMAND
389395 ${CMAKE_COMMAND} -E echo
390396 "${CMAKE_CURRENT_BINARY_DIR} /${target_code_coverage_COVERAGE_TARGET_NAME} .profraw"
391397 >
392398 ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/${target_code_coverage_COVERAGE_TARGET_NAME}
399+ COMMAND ${CMAKE_COMMAND} -E rm -f
400+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
393401 DEPENDS ccov-libs ${TARGET_NAME} )
402+ add_custom_target (
403+ ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
404+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw)
394405
395406 # Merge the generated profile data so llvm-cov can process it
396- add_custom_target (
397- ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME}
407+ add_custom_command (
408+ OUTPUT ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
398409 COMMAND
399410 ${LLVM_PROFDATA_PATH} merge -sparse
400411 ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw -o
401412 ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
402- DEPENDS )
413+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profraw )
403414
404415 # Ignore regex only works on LLVM >= 7
405416 if (LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0" )
@@ -416,7 +427,7 @@ function(target_code_coverage TARGET_NAME)
416427 ${LLVM_COV_PATH} show $<TARGET_FILE:${TARGET_NAME} >
417428 -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
418429 -show-line-counts-or -regions ${LINKED_OBJECTS} ${EXCLUDE_REGEX}
419- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
430+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
420431
421432 # Print out a summary of the coverage information to the command line
422433 add_custom_target (
@@ -425,7 +436,7 @@ function(target_code_coverage TARGET_NAME)
425436 ${LLVM_COV_PATH} report $<TARGET_FILE:${TARGET_NAME} >
426437 -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
427438 ${LINKED_OBJECTS} ${EXCLUDE_REGEX}
428- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
439+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
429440
430441 # Export coverage information so continuous integration tools (e.g.
431442 # Jenkins) can consume it
@@ -436,7 +447,7 @@ function(target_code_coverage TARGET_NAME)
436447 -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME} .profdata
437448 -format="text" ${LINKED_OBJECTS} ${EXCLUDE_REGEX} >
438449 ${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /${target_code_coverage_COVERAGE_TARGET_NAME} .json
439- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
450+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
440451
441452 # Only generates HTML output of the coverage information for perusal
442453 add_custom_target (
@@ -447,15 +458,12 @@ function(target_code_coverage TARGET_NAME)
447458 -show-line-counts-or -regions
448459 -output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /${target_code_coverage_COVERAGE_TARGET_NAME}
449460 -format="html" ${LINKED_OBJECTS} ${EXCLUDE_REGEX}
450- DEPENDS ccov-processing- ${target_code_coverage_COVERAGE_TARGET_NAME} )
461+ DEPENDS ${target_code_coverage_COVERAGE_TARGET_NAME} .profdata )
451462
452463 # Generates HTML output of the coverage information for perusal
453464 add_custom_target (
454465 ccov-${target_code_coverage_COVERAGE_TARGET_NAME}
455- COMMAND
456- DEPENDS ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}
457- ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}
458- ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} )
466+ DEPENDS ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} )
459467
460468 elseif (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
461469 "GNU" )
@@ -556,14 +564,14 @@ function(target_code_coverage TARGET_NAME)
556564
557565 # ALL
558566 if (target_code_coverage_ALL)
559- if (NOT TARGET ccov-all -processing )
567+ if (NOT TARGET ccov-all -run )
560568 message (
561569 FATAL_ERROR
562570 "Calling target_code_coverage with 'ALL' must be after a call to 'add_code_coverage_all_targets'."
563571 )
564572 endif ()
565573
566- add_dependencies (ccov-all -processing
574+ add_dependencies (ccov-all -run
567575 ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} )
568576 endif ()
569577 endif ()
@@ -612,34 +620,36 @@ function(add_code_coverage_all_targets)
612620 if (CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang"
613621 OR CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang" )
614622
623+ add_custom_target (ccov-all -run)
624+
615625 # Merge the profile data for all of the run targets
616626 if (WIN32 )
617- add_custom_target (
618- ccov-all -processing
627+ add_custom_command (
628+ OUTPUT ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata
619629 COMMAND powershell cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
620630 ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list
621631 COMMAND powershell cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
622632 ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list
623633 COMMAND
624634 powershell -Command $$FILELIST = Get -Content
625- ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list \;
626- llvm-profdata.exe merge -o
627- ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse $$FILELIST)
635+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list \; llvm-profdata.exe
636+ merge -o ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse
637+ $$FILELIST
638+ DEPENDS ccov-all -run)
628639 else ()
629- add_custom_target (
630- ccov-all -processing
640+ add_custom_command (
641+ OUTPUT ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata
631642 COMMAND
632- ${CMAKE_COMMAND} -E cat
633- ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
643+ ${CMAKE_COMMAND} -E cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /objects/* >
634644 ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list
635645 COMMAND
636- ${CMAKE_COMMAND} -E cat
637- ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
646+ ${CMAKE_COMMAND} -E cat ${CMAKE_COVERAGE_DATA_DIRECTORY} /profraw/* >
638647 ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list
639648 COMMAND
640649 ${LLVM_PROFDATA_PATH} merge -o
641650 ${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata -sparse `cat
642- ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list`)
651+ ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -profraw.list`
652+ DEPENDS ccov-all -run)
643653 endif ()
644654
645655 # Regex exclude only available for LLVM >= 7
@@ -660,7 +670,7 @@ function(add_code_coverage_all_targets)
660670 report $$FILELIST
661671 -instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
662672 ${EXCLUDE_REGEX}
663- DEPENDS ccov-all -processing )
673+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
664674 else ()
665675 add_custom_target (
666676 ccov-all -report
@@ -669,7 +679,7 @@ function(add_code_coverage_all_targets)
669679 ${CMAKE_COVERAGE_DATA_DIRECTORY} /all -objects.list`
670680 -instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
671681 ${EXCLUDE_REGEX}
672- DEPENDS ccov-all -processing )
682+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
673683 endif ()
674684
675685 # Export coverage information so continuous integration tools (e.g. Jenkins)
@@ -684,7 +694,7 @@ function(add_code_coverage_all_targets)
684694 -instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
685695 -format="text" ${EXCLUDE_REGEX} >
686696 ${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /coverage.json
687- DEPENDS ccov-all -processing )
697+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
688698 else ()
689699 add_custom_target (
690700 ccov-all -export
@@ -694,7 +704,7 @@ function(add_code_coverage_all_targets)
694704 -instr-profile=${CMAKE_COVERAGE_DATA_DIRECTORY} /ccov-all .profdata
695705 -format="text" ${EXCLUDE_REGEX} >
696706 ${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /coverage.json
697- DEPENDS ccov-all -processing )
707+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
698708 endif ()
699709
700710 # Generate HTML output of all added targets for perusal
@@ -709,7 +719,7 @@ function(add_code_coverage_all_targets)
709719 -show-line-counts-or -regions
710720 -output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /all -merged
711721 -format="html" ${EXCLUDE_REGEX}
712- DEPENDS ccov-all -processing )
722+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
713723 else ()
714724 add_custom_target (
715725 ccov-all
@@ -720,7 +730,7 @@ function(add_code_coverage_all_targets)
720730 -show-line-counts-or -regions
721731 -output -dir=${CMAKE_COVERAGE_OUTPUT_DIRECTORY} /all -merged
722732 -format="html" ${EXCLUDE_REGEX}
723- DEPENDS ccov-all -processing )
733+ DEPENDS ${CMAKE_COVERAGE_DATA_DIRECTORY} / ccov-all .profdata )
724734 endif ()
725735
726736 elseif (CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES
0 commit comments