CLANG puede ser dicho no es analizar algunos archivos?
Pregunta
Estoy tratando de utilizar sonido metálico al perfil de un proyecto que estoy trabajando. El proyecto incluye una bastante grande biblioteca estática que se incluye en Xcode como dependencia.
Me gusta mucho ruido metálico no analizar archivos de las dependencias, ya que parece hacer ruido metálico falle. es posible? He estado leyendo la documentación sonido metálico, y yo no lo he encontrado.
Solución 2
Por lo tanto, esto no es realmente una respuesta, pero funcionó bastante bien.
Lo que terminé haciendo fue la construcción de la biblioteca estática antes de tiempo, y luego la construcción del proyecto mediante la exploración y construcción. Puesto que ya existía una acumulación de hasta al día de la biblioteca estática, no fue reconstruido y por lo tanto no se escaneó.
Me encanta tener todavía una respuesta real para esto, sin embargo.
Otros consejos
Como último recurso, hay una opción de fuerza bruta.
Esto, unido al principio de un archivo:
// Omit from static analysis.
#ifndef __clang_analyzer__
Esto, unido al extremo:
#endif // not __clang_analyzer__
y sonido metálico --analyze no verá el contenido del archivo.
referencia: Controlar estáticas Analizador de Diagnóstico
Yo no uso XCode, pero el uso de exploración y construcción de las siguientes obras Linux para mí. Yo mi caso, quiero correr el análisis estático en todo el primer partido, el código no generado. Sin embargo, quiero evitar ejecutarlo en THIRD_PARTY código y el código generado.
En la línea de comandos, sonido metálico analizador se engancha en la generación cuando la exploración y construcción establece las variables de entorno CC y CXX a ccc-analizador y C ++ - ubicaciones analizador. Escribí dos guiones simples llamadas ccc-analyzer.py y C ++ - analyzer.py y les enganchado en la compilación en lugar del defecto. En estos scripts envoltura, simplemente miraba la ruta del archivo que se está compilando y luego ejecutar el compilador ya sea cruda directamente (si lo deseo de evitar el análisis estático) o el c * -analyzer (si lo deseo para el análisis estático que ocurra). Mi escritura es en python y atado a mi sistema de construcción específica, sino como un ejemplo que necesita modificación:
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))