如何将基于Clang的工具作为单独的CMake目标运行

时间:2018-07-31 16:44:48

标签: cmake

我已经编写了一个基于Clang的工具,并且希望在现有的CMake可执行目标上运行它。我希望这是一个单独的 Makefile目标,因此我可以在不构建exe目标的情况下运行它。

有一种解决方案可以在exe目标构建期间运行(如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在my_exe_target构建期间运行我的工具。在构建日志中,我看到:

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

但是可以创建一个单独的目标吗?

1 个答案:

答案 0 :(得分:1)

也许您可以使用add_custom_command,例如(根据您的var和其他需求进行调整):

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

修改(以解决OP问题):

一个好的出发点是搜索__run_co_compile并尝试根据Makefile规则重新创建命令(如果生成器为make)。属性没有“自动”传播,因为自定义目标或命令可以是任何东西。您可以使用相应的cmake variables(例如CMAKE_CXX_FLAGS等)或目标properties(例如COMPILE_DEFINITIONS)来模拟。