0

我有很多自定义 CMake 命令,所以我最终在构建脚本中重复了很多这种模式,例如

set(PREREQ ${CMAKE_CURRENT_SOURCE_DIR}/foo.txt ${CMAKE_CURRENT_SOURCE_DIR}/bar.txt)
add_custom_command(
    OUTPUT baz.txt
    COMMAND cat ${PREREQ} > baz.txt
    DEPENDS ${PREREQ}
)
add_custom_target(a ALL DEPENDS baz.txt)

$@CMake ( ,等)中是否有 GNU Make 自动变量的等价物,$<所以我可以避免两次指定输入/输出(依赖项、输出和命令)?

我还能怎么弄干它?

4

1 回答 1

1

使用自定义函数怎么样?对于您的示例脚本,这可能如下所示:

function (add_custom_command_with_target _targetName _output)
    add_custom_command(
        OUTPUT ${_output}
        COMMAND cat ${ARGN} > ${_output}
        DEPENDS ${ARGN}
    )
    add_custom_target(${_targetName} ALL DEPENDS ${_output})
endfunction()

可以通过以下方式调用该函数:

add_custom_command_with_target(a baz.txt ${CMAKE_CURRENT_SOURCE_DIR}/foo.txt ${CMAKE_CURRENT_SOURCE_DIR}/bar.txt)

在函数体中,您可以使用预定义变量ARGN,它保存最后一个预期参数之后的参数列表。这是最接近 GNU Make 的预定义变量的东西。

于 2012-12-15T13:27:53.510 回答