random
random

Reputation: 4038

How to run Clang-based tool as a separate CMake target

I have written a Clang-based tool and I want to run it on existing CMake executable target. I want this to be a separate Makefile target, so I can run it without builiding exe target.

There is a solution to run it during exe target build (described in cmake clang-tidy (or other script) as custom target)

set(CLANG_TIDY_EXE  ${MY_CLANG_BASED_TOOL} )
set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}" " --my-additional-options")

set_target_properties(
        my_exe_target PROPERTIES
        CXX_CLANG_TIDY "${DO_CLANG_TIDY}"
)

CMake runs my tool during my_exe_target build. In build log I see:

...    
cmake -E __run_co_compile --tidy=my_tool --source=main.cpp -- ..

But is it possible to create a separate target?

Upvotes: 1

Views: 1359

Answers (1)

compor
compor

Reputation: 2339

Maybe you could use add_custom_command, e.g. (adjust according to your vars and other needs):

add_custom_target(tidyup
    COMMAND ${DO_CLANG_TIDY} [...] ${SOURCES}
   DEPENDS [...]
   WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

edit (to address OP question):

A good starting point is to search for __run_co_compile and try to recreate the command from the Makefile rule (if your generator is make). There's no "automatic" propagation of the attributes, because a custom target or command can be anything. You could use the corresponding cmake variables (e.g. CMAKE_CXX_FLAGS, etc) or target properties (e.g. COMPILE_DEFINITIONS) to emulate that.

Upvotes: 1

Related Questions