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自動変数に相当するものがある$@ので$<、入力/出力を2回(依存関係、出力、およびコマンド)指定することを回避できますか?

他にどのようにそれを乾かすことができますか?

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は、最後に予期された引数を過ぎた引数のリストを保持します。これは、GNUMakeの事前定義された変数に最も近いものです。

于 2012-12-15T13:27:53.510 に答える