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.

È stato utile?

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))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top