1

我编写了一些自定义脚本,这些脚本在 CMake 目标的自定义命令中调用。touch script.sh如果任何脚本被更新(例如),我希望重建目标。我已经使用 DEPENDS 参数尝试了几种变体,但我尝试过的都没有。

这是我所拥有的简化版本:

function(run_my_special_rule target)

set (script_to_run ${CMAKE_SOURCE_DIR}/scripts/script.sh)

add_custom_command(
    TARGET ${target} PRE_BUILD
    COMMAND find ${CMAKE_CURRENT_SOURCE_DIR} -name "*.hpp" -exec ${script_to_run} {} +
    DEPENDS ${script_to_run}
)

endfunction()
4

1 回答 1

2

您在这里混合了两个不同的函数签名。查看官方文档:

  1. https://cmake.org/cmake/help/latest/command/add_custom_command.html#generating-files
  2. https://cmake.org/cmake/help/latest/command/add_custom_command.html#build-events

前者可以有DEPENDS陈述,后者可以有TARGET陈述。你不能把两者混在一起。

在您的情况下DEPENDS将被忽略,并且仅在构建原始目标时才会运行自定义命令。

您必须创建一个附加文件来比较时间戳。这个最小的例子应该让你开始:

cmake_minimum_required(VERSION 3.20)
project(custom_file_target VERSION 1.0.0)

add_executable(main main.cpp) # main target

add_custom_target(
    custom
    DEPENDS ${CMAKE_BINARY_DIR}/output.txt
)

add_custom_command(
    OUTPUT ${CMAKE_BINARY_DIR}/output.txt
    COMMAND echo your actual custom command
    COMMAND touch ${CMAKE_BINARY_DIR}/output.txt
    DEPENDS ${CMAKE_SOURCE_DIR}/dependency.txt
)

add_dependencies(main custom)

附带说明:您必须确保您的main目标实际上依赖于正确的文件(即也依赖于从您的脚本生成的文件 - 不包括output.txt)。

于 2022-01-07T19:41:34.040 回答