Può essere clang detto di non analizzare determinati file?
Domanda
Sto cercando di utilizzare clang al profilo di un progetto su cui sto lavorando. Il progetto prevede una piuttosto grande libreria statica che è incluso in Xcode come dipendenza.
Mi piacerebbe davvero clang di non analizzare i file le dipendenze, come sembra fare clang sicuro. È possibile? Ho letto la documentazione clang, e io non l'ho trovato.
Soluzione 2
Quindi, questo non è davvero una risposta, ma ha funzionato abbastanza bene.
Quello che ho finito per fare è stato la costruzione della libreria statica prima del tempo, e poi costruire il progetto con scansione-build. Poiché non vi era già una build up-to-date della libreria statica, non è stata ricostruita e quindi non è stato scansionato.
Mi piacerebbe ancora l'amore per avere una risposta vera per questo, però.
Altri suggerimenti
Come ultima risorsa, c'è un'opzione forza bruta.
Aggiungi questo per l'inizio di un file:
// Omit from static analysis.
#ifndef __clang_analyzer__
Aggiungi questo alla fine:
#endif // not __clang_analyzer__
e clang --analyze non vedrete il contenuto del file.
di riferimento: Controllo statico Analyzer diagnostica
Non faccio uso di XCode, ma utilizzando la scansione-build in Linux i seguenti lavori per me. Ho il mio caso, voglio eseguire l'analisi statica su tutti i primo partito, il codice non generato. Tuttavia, voglio evitare esecuzione su THIRD_PARTY codice e codice generato.
Nella riga di comando, clang-Analyzer è agganciato nella generazione quando scan-build imposta le variabili d'ambiente CC e CXX a CCC-analizzatore e C ++ - posizioni dell'analizzatore. Ho scritto due semplici script chiamato ccc-analyzer.py e C ++ - analyzer.py e agganciato per la compilazione al posto del default. In questi script wrapper, ho semplicemente guardato il percorso del file in fase di compilazione e quindi eseguire sia il compilatore prima direttamente (se voglio evitare di analisi statica) oppure il c * -analyzer (se voglio per l'analisi statica a verificarsi). Il mio script è in python e legato al mio sistema di compilazione specifica, ma come un esempio che ha bisogno di modifiche:
import subprocess
import sys
def main(argv):
is_third_party_code = False
for i in range(len(argv)):
arg = argv[i]
if arg == '-c':
file_to_compile = argv[i + 1]
if '/third_party/' in file_to_compile or \
file_to_compile.startswith('gen/'):
is_third_party_code = True
break
if is_third_party_code:
argv[0] = '/samegoal/bin/clang++'
else:
argv[0] = '/samegoal/scan-build/c++-analyzer'
return subprocess.call(argv)
if __name__ == '__main__':
sys.exit(main(sys.argv))