2017-08-03 12 views
2

My C++ - プログラムがファイルを読み書きします。それらが必要なディレクトリを構築するためにソースディレクトリからをコピーした入力ファイルを持っているために、私はCMakeLists.txtにこのラインを使用しています:CMake:ビルドディレクトリからソースdirectoyにファイルをコピーする

configure_file(<input> <output> COPYONLY) 

そのプロジェクトビュー内のファイルを一覧表示しますQtCreator正副作用として。

ファイルをビルドディレクトリからソースディレクティに自動的にコピーする方法はありますか?ソースディレクタで更新された出力ファイルを持ち、QtCreatorのプロジェクトビューにもリストアップできますか?

答えて

2

あなたはそれに慣れている場合、あなたはおそらく、絶対パスを使用して同じコマンドを使用することができます。

configure_file(${CMAKE_BINARY_DIR}/<path>/<input> ${CMAKE_SOURCE_DIR}/<path>/<output> COPYONLY) 

CMAKE_BINARY_DIRは次のとおりです。

[...]トップへのフルパス現在のCMakeビルドツリーのレベル。

CMAKE_SOURCE_DIR

はあるが:

[...]現在CMakeのソースツリーの最上位レベルへのフルパス。

それ以外の場合は、それらを直接使用して、彼らは相対パスがあるだけのカスタム方法<input><output>documentationconfigure_file扱いによります。他の点で

  • <input>はファイル名である:

    相対パスをCMAKE_CURRENT_SOURCE_DIRの値に対して処理されます。

    絶対パスはそのまま使用されます。

  • <output>ファイル名またはディレクトリである:

    相対パスをCMAKE_CURRENT_BINARY_DIRの値に対して処理されます。

    絶対パスはそのまま使用されます。


あなたが使用できる別の可能なアプローチはfileコマンドとその(私は言わせて)COPYバージョンに依存することです。ドキュメントから:

COPY署名は、ファイル、ディレクトリ、およびシンボリックリンクをコピー先のフォルダにコピーします。相対入力パスは現在のソースディレクトリに対して評価され、相対的な出力先は現在のビルドディレクトリに対して評価されます。コピーすると、入力ファイルのタイムスタンプが保存され、同じタイムスタンプの出力先にファイルが存在する場合、そのファイルが最適化されます。明示的なアクセス許可またはNO_SOURCE_PERMISSIONSが指定されていない限り、コピーは入力許可を保持します(デフォルトはUSE_SOURCE_PERMISSIONS)。

絶対パスはconfigure_fileと同じように直接使用できますが、それらはそのままです。相対パスは、通常cmakeで発生するのとは異なる方法で扱われます。

+0

ありがとうございました。それは絶対pathesと動作します。見つからない唯一のことは、qtcreatorがファイルを今リストしていないことです。 BTW:同時に2つの 'configure_file'ステートメントを両方向(source-> buildとbuild-> source)でコピーするのは悪い考えです。 – Sadik

+0

なぜそれは悪い考えですか?とにかく私はあなたが使用できるもう一つの可能​​な解決法を答えに加えています。 – skypjack

+0

申し訳ありませんが、私は間違っていました。 QtCreatorがクラッシュしましたが、別の理由があったと思います。 2回目の 'configure_file'文でもう一度試してみましたが、今度はファイルが更新され、qtcreatorにリストされています。 – Sadik