config
ソースファイルの隣のディレクトリにいくつかの設定ファイル(xml、ini、...)があります。プロジェクトを作成するたびに、configディレクトリ内のすべてのファイルをビルドディレクトリ(実行可能ファイルの隣)にコピーするにはどうすればよいですか?
5 に答える
を使用できますadd_custom_command
。
ターゲットが呼び出されたとするとMyTarget
、次のように実行できます。
add_custom_command(TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config/ $<TARGET_FILE_DIR:MyTarget>)
MyTarget
これは、「/ config」の内容をビルドして、ターゲットのexe/libが終了するディレクトリにコピーするたびに実行されます。
Mark Lakataが以下のコメントで指摘しているように、inに置き換えると、PRE_BUILD
ビルドが成功した場合にのみコピーが実行されます。POST_BUILD
add_custom_command
説明
${CMAKE_COMMAND}
CMakeへの道です-E
ビルドする代わりにCMakeがコマンドを実行するようにしますcopy_directory
コマンドラインツールですconfig
コンテンツがビルドターゲットにコピーされるディレクトリ(プロジェクトのルートに該当する)です$<TARGET_FILE_DIR:MyTarget>
ドキュメントで説明されているジェネレータ式です。add_custom_command
トップアンサーに加えて、
コンテンツの代わりにディレクトリ自体をコピーするに/${FOLDER_NAME}
は、2番目のパラメータの最後に追加します。
このような:
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
CMakeはシェルタイプのファイルコピーをサポートしています。このリンクはあなたに役立つはずです-ディレクトリをソースツリーからバイナリツリーにコピーする方法は?
シンボリックリンクを使用する
CMakeは以下を介してシンボリックリンクを有効にしますcreate_symlink
:
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)
これにより、ディレクトリ内のファイルに変更を加えたときに、ビルドフォルダが後で更新されるようになります。
私のプロジェクトでは、INSTALLを使用してCMakeで、confファイルを使用してバイナリを移動する場所と場所を指定します。cmakeの実行後、「makeinstall」を使用します。