CMake add_custom_command没有输出

时间:2017-04-11 13:16:47

标签: c++ cmake

我需要的是过滤某些目录中的* .h和* .cpp文件,然后使用某些脚本对其进行格式化,因此我编写以下代码:

add_custom_command(

    DEPENDS ${GENERATED_STUFF}

    COMMAND find "${OUTPUT_DIR}/include/SOME_PATH" -iname *.h -o -iname *.cpp | xargs /net/binlib/lib/clang/clang-format-3.9.0 -i

    OUTPUT ?????
)

但是,此命令只修改现有文件,因此不会生成新的文件输出。在这种情况下,我该如何定义输出?有没有其他方法可以解决这个问题?我只想在文件更改时重新执行此命令。

1 个答案:

答案 0 :(得分:1)

您可以创建“timestamp”文件。构建系统仅将其用于提取时间戳,并将其与 DEPENDS 下的文件进行比较。

add_custom_command(
    DEPENDS ${GENERATED_STUFF}
    COMMAND find "${OUTPUT_DIR}/include/exchange_protocol" -iname *.h -o -iname *.cpp | xargs /net/binlib/lib/clang/clang-format-3.9.0 -i
    COMMAND ${CMAKE_COMMAND} -E touch my_file.stamp
    OUTPUT my_file.stamp
)

要使add_custom_command正常工作,您需要使用add_custom_target,这取决于给定的文件。