CMake中的自动变量

时间:2012-12-15 11:47:10

标签: cmake

我有很多自定义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自动变量,因此我可以避免两次指定输入/输出(依赖项,输出和命令)?

我怎么能干掉它?

1 个答案:

答案 0 :(得分: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预定义变量的最接近的东西。