仅在修改依赖项时运行自定义目标

问题描述 投票:0回答:1

我使用

ADD_CUSTOM_TARGET
让我的 Visual Studio 解决方案在编译时运行
cppcheck

ADD_CUSTOM_TARGET( STATIC_CODE_ANALYSIS_QUIET ALL COMMAND cppcheck ${PATH_TO_SOURCES}/src )

(这是一个MCVE,其实我还有更多争论)

问题是,每当我构建解决方案时,即使我没有修改 src 文件夹中的任何文件,该工具也会运行。这是没有意义的,它应该只在文件被修改时运行。

所以我尝试添加一个

DEPENDS
参数:

set( STATIC_CODE_ANALYSIS_DEPENDENCIES )
list( APPEND STATIC_CODE_ANALYSIS_DEPENDENCIES "${PATH_TO_SOURCES}/src/main.cpp" )
ADD_CUSTOM_TARGET( STATIC_CODE_ANALYSIS_QUIET ALL COMMAND cppcheck ${PATH_TO_SOURCES}/src DEPENDS ${STATIC_CODE_ANALYSIS_DEPENDENCIES} )

但这没有什么区别。我看到 doc 说“目标没有输出文件,并且总是被认为是过时的”,所以这可能是有意的。看起来

add_custom_command
应该用于正确处理“最新”/“过时”目标,但是,
cppcheck
没有生成任何“输出文件”,我无法创建“自定义命令”(这需要
OUTPUT
参数)。

如何在构建解决方案时自动从

cppcheck
运行
Visual Studio
,但前提是自上次运行以来修改了文件?

注意:使用 cppcheck 的

--output-file
参数将其用作
OUTPUT
是不可接受的,因为这样工具的输出不会转到
Visual Studio
控制台,而用户需要使用该控制台来查看是否一切正常或不是。

visual-studio cmake cppcheck
1个回答
0
投票

正如 Tsyvarev 建议的那样,让我们在自定义命令中执行两个命令并手动创建时间戳文件。

# Static code analysis project:
ADD_CUSTOM_COMMAND(
    OUTPUT           cppcheck.timestamp
    COMMAND          cppcheck
    ARGS             ${PATH_TO_SOURCES}/src
    COMMAND          date /t > cppcheck.timestamp
    COMMENT          "Running static code analysis..."
    VERBATIM
    DEPENDS          ${STATIC_CODE_ANALYSIS_DEPENDENCIES} )
# Add module:
ADD_CUSTOM_TARGET( STATIC_CODE_ANALYSIS
    ALL
    SOURCES cppcheck.timestamp )
© www.soinside.com 2019 - 2024. All rights reserved.