1. ホーム
  2. cmake

[解決済み】CMakeでソースディレクトリからバイナリディレクトリにファイルをコピーする

2022-02-07 22:40:27

質問

CLionで簡単なプロジェクトを作ろうとしています。これは、プロジェクト(またはそれのいくつかの並べ替え)を構築するためにMakefileを生成するためにCMake(私はここで新しいです)を使用します。

私が必要とするのは、私のコードを実行するたびに、プロジェクト以外のファイル(リソースファイルのようなもの)をバイナリディレクトリに転送することだけです。

そのファイルにはテストデータが入っていて、アプリケーションはそれを開いて読みます。いくつかの方法を試してみました。

  • Via file(COPY ...

    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
            DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/input.txt
    
    

    良い感じですが、一度だけ動作して、次回実行時にファイルを再コピーしないようにしてください。

  • 経由 add_custom_command

    • OUTPUT バージョン

      add_custom_command(
              OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/input.txt
              COMMAND ${CMAKE_COMMAND} -E copy
                      ${CMAKE_CURRENT_SOURCE_DIR}/input.txt
                      ${CMAKE_CURRENT_BINARY_DIR}/input.txt)
      
      
    • TARGET バージョン

      add_custom_target(foo)
      add_custom_command(
              TARGET foo
              COMMAND ${CMAKE_COMMAND} copy
                      ${CMAKE_CURRENT_BINARY_DIR}/test/input.txt
                      ${CMAKE_SOURCE_DIR})
      
      

    しかし、どれもうまくいきません。

私は何を間違えているのでしょうか?

どうすればいいですか?

を使用することを検討してください。 configure_file と一緒に COPYONLY オプションで指定します。

configure_file(<input> <output> COPYONLY)

とは異なり file(COPY ...) は、入力と出力の間にファイルレベルの依存関係を作ってしまう、ということです。

入力ファイルが変更された場合、ビルドシステムは CMake を再実行してファイルを再設定し、ビルドシステムを再度生成します。