これに触発されて、ビルド時にファイルのリストをコピーするマクロを作成しようとしていました。
macro (copy_files_at_build_time targetname) #usage: copy_files_at_build_time(<targetname> <file> [<files>] <destination>)
if(ARGC LESS 3)
message(ERROR "copy_files_at_build_time called with less than 3 arguments")
endif(ARGC LESS 3)
MATH(EXPR LAST_INDEX "${ARGC}-2")
MATH(EXPR DEST_INDEX "${ARGC}-1")
set(MY_DESTINATION ${ARGV${DEST_INDEX}})
foreach(I RANGE 1 ${LAST_INDEX})
message (STATUS "${CMAKE_COMMAND} -E copy ${ARGV${I}} ${MY_DESTINATION}")
add_custom_command(TARGET ${targetname} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ARGV${I}} ${MY_DESTINATION})
endforeach(I)
endmacro(copy_files_at_build_time)
ご覧のとおり、デバッグ メッセージが表示されます。残念ながら、出力する${ARGV${I}}
と と${MY_DESTINATION}
(これは${ARGV${DEST_INDEX}}
) の両方が空です。したがって、変数名の最後の部分として変数を使用して、ARGV1、ARGV2 など (マクロのドキュメントを参照) にアクセスすることはできないようです。リストコマンドを使用して回避策を実装しますが、私の質問は次のとおりです。
一部の要素 (最初と最後の要素など) をスキップする必要がある場合、ARGV0、ARGV1、ARGV2 要素を循環させる簡単な方法はありますか?
編集
悲しいことに、ARGV では LIST コマンドでさえ機能しないことがわかりました。しかし、最初に ARGV のコピーを作成してから、そのコピーに対して LIST コマンドを実行すると機能します。