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.