91

configソースファイルの隣のディレクトリにいくつかの設定ファイル(xml、ini、...)があります。プロジェクトを作成するたびに、configディレクトリ内のすべてのファイルをビルドディレクトリ(実行可能ファイルの隣)にコピーするにはどうすればよいですか?

4

5 に答える 5

161

を使用できます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_BUILDadd_custom_command

説明

  • ${CMAKE_COMMAND}CMakeへの道です
  • -Eビルドする代わりにCMakeがコマンドを実行するようにします
  • copy_directoryコマンドラインツールです
  • configコンテンツがビルドターゲットにコピーされるディレクトリ(プロジェクトのルートに該当する)です
  • $<TARGET_FILE_DIR:MyTarget>ドキュメントで説明されているジェネレータ式です。add_custom_command
于 2012-11-17T11:12:50.477 に答える
19

トップアンサーに加えて、

コンテンツの代わりにディレクトリ自体をコピーするに/${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)
于 2019-03-17T15:34:09.203 に答える
5

CMakeはシェルタイプのファイルコピーをサポートしています。このリンクはあなたに役立つはずです-ディレクトリをソースツリーからバイナリツリーにコピーする方法は?

于 2012-11-17T10:43:05.817 に答える
3

シンボリックリンクを使用する


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)

これにより、ディレクトリ内のファイルに変更を加えたときに、ビルドフォルダが後で更新されるようになります。

于 2021-11-06T09:57:59.817 に答える
-5

私のプロジェクトでは、INSTALLを使用してCMakeで、confファイルを使用してバイナリを移動する場所と場所を指定します。cmakeの実行後、「makeinstall」を使用します。

于 2012-11-17T10:46:00.767 に答える