Supponendo che "compilato con diverse opzioni" si intende che si compila in modo da ottenere diversi output dopo la preelaborazione, con l'aiuto di lcov (come menzionato da k0n3ru) che ero in grado di farlo. Ecco il codice di esempio nel file di sut.c:
#include "sut.h"
#include <limits.h>
int foo(int a) {
#if defined(ADD)
a += 42;
#endif
#if defined(SUB)
a -= 42;
#endif
return a;
}
con sut.h fornendo solo la dichiarazione di foo, e una semplice principale test.c, che chiama foo e stampa i risultati. Poi, con questa sequenza di comandi sono stato in grado di creare un file total.info con copertura del 100% per sut.c:
> g++ --coverage -DADD test.c sut.c -o add.out
> ./add.out
> lcov -c -d . -o add.info # save data from .gdda/.gcno into add.info
> g++ --coverage -DSUB test.c sut.c -o sub.out
> ./sub.out
> lcov -c -d . -o sub.info # save again, this time into sub.info
> lcov -a add.info -a sub.info -o total.info # combine them into total.info
> genhtml total.info
Che poi per sut.c mostra i seguenti risultati:
EDIT (Grazie a Gluttton per avermi ricordato di aggiungere questa parte): Il passaggio dal file total.info in formato lcov all'output di Cobertura XML dovrebbe quindi essere possibile con l'aiuto del "convertitore XML di lcov in cobertura" fornito qui (anche se non l'ho provato): https://github.com/eriwen/lcov-to-cobertura-xml
Il fatto che la fusione di informazioni sulla copertura sia possibile, tuttavia, non significa certamente che sia una buona idea farlo: la copertura, IMO, ha solo un valore informativo limitato per quanto riguarda la qualità di una suite di test. L'unione dei risultati della copertura da diverse uscite del preprocessore diminuirà ulteriormente questo valore.
Questo perché le possibilità per gli sviluppatori di conoscere gli scenari che non hanno considerato saranno ridotte: utilizzando la compilazione condizionale, la struttura di controllo e il flusso di dati del codice possono variare enormemente tra gli output del preprocessore - informazioni sulla copertura risultanti da "sovrapposizione" "I risultati delle esecuzioni dei test per le diverse uscite del preprocessore possono rendere impossibile un'interpretazione significativa dei risultati.
fonte
2016-01-31 22:18:13
lcov fa questo. Quindi potrebbe essere utile qualcuno del progetto lcov. – k0n3ru
@ k0n3ru, lcov unisce i dati in un formato intermedio. – Gluttton
Il problema con lcov è che non ho più il formato XML Cobertura. –