CMake add target для вызова анализатора clang
Мне бы хотелось добиться того же результата, что и http://blog.alexrp.com/2013/09/26/clangs-static-analyzer-and-automake, но с CMake.
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
Итак, вы можете запустить
make analyze
make clean
Думаю, мне нужно использовать add_custom_command/add_custom_target
и как-то изменить расширение "object file" только для этой цели.
Затем получите список сгенерированных файлов, чтобы передать их в script для объединения их в один выходной файл.
Может ли кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 1
Я нашел способ:
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()
Объединение файлов clang plist (которые получают расширение .o таким образом) в отчет все еще открыто ($<TARGET_OBJECTS:objlibtarget>
?).
Ответ 2
Вы можете использовать scan-build
при запуске cmake
.
scan-build cmake /path/to/source
scan-build make
scan-build
устанавливает переменные среды CC
и CXX
, которые подбираются cmake
.