2013-09-27 11 views
16

Mi piacerebbe sostanzialmente ottenere lo stesso valore di http://blog.alexrp.com/2013/09/26/clangs-static-analyzer-and-automake, ma con CMake.CMake aggiungi target per invocare l'analizzatore clang

analyze_srcs = foo.c 
analyze_plists = $(analyze_srcs:%.c=%.plist) 
CLEANFILES = $(analyze_plists) 

$(analyze_plists): %.plist: %.c 
    @echo " CCSA " [email protected] 
    @$(COMPILE) --analyze $< -o [email protected] 

analyze: $(analyze_plists) 
.PHONY: analyze 

Così si può eseguire

make analyze 
make clean 

Credo che ho bisogno di usare add_custom_command/add_custom_target e in qualche modo cambiare l'estensione "file oggetto" solo per questo obiettivo.

Successivamente, ottenere un elenco dei file generati per passarli a uno script per unirli in un unico file di output.

Qualcuno può indicarmi la giusta direzione?

risposta

2

ho trovato un modo: (? $<TARGET_OBJECTS:objlibtarget>)

function(add_clang_static_analysis target) 
    get_target_property(SRCs ${target} SOURCES) 
    add_library(${target}_analyze OBJECT EXCLUDE_FROM_ALL ${SRCs}) 
    set_target_properties(${target}_analyze PROPERTIES 
          COMPILE_OPTIONS "--analyze" 
          EXCLUDE_FROM_DEFAULT_BUILD true) 
endfunction() 

Unione di file plist di clangore (che ottengono l'estensione .o questo modo) in un rapporto è ancora aperta.

18

È possibile utilizzare scan-build durante l'esecuzione di cmake.

scan-build cmake /path/to/source 
scan-build make 

scan-build imposta le CC e CXX ambientali variabili che vengono raccolti da cmake.