2012-05-14 9 views
0

私たちはVisual Studio 2008用のソリューションファイルを生成するためにCMakeを使用しています。ライブラリと実行可能ファイルをビルドする通常のソースプロジェクトに加えて、設定ファイルだけを含むプロジェクトを用意したいと思います。これらのファイルは、実行時にプロジェクトの動作を設定するために使用されます。プロジェクトをビルドする必要はありませんが、それらをソリューションに含めることで、それらのファイルを簡単に編集できます。私はそうのようなadd_custom_targetを使ってこれを実現することができました:CMakeはどのように構成ファイルのみを含むVisual Studioプロジェクトを作成する必要がありますか?

file(GLOB ini_files ${PROJECT_SOURCE_DIR}/../config/ini/*) 
source_group(ini FILES ${ini_files}) 
file(GLOB xml_files ${PROJECT_SOURCE_DIR}/../config/xml/*) 
source_group(xml FILES ${xml_files}) 
add_custom_target(config SOURCES ${ini_files} ${xml_files}) 

これは私のサブフォルダとして設定ファイルが含まれ、「設定」プロジェクトを提供します。しかし、存在しないファイルには "config"というリンクもあります。私はこれがこのルールで作成されたターゲットへのリンクであると考えています。ビルドするものはないので、これは死んだリンクのままです。今私の質問は次のとおりです:

  1. 私は欲しいものを達成する正しい方法ですか? そうでない場合、よりよい解決策は何でしょうか?
  2. 正しい場合は、どうすればターゲットの名前へのリンクを取り除くことができますか?また、 "CMake Rules"フォルダを削除して、configプロジェクトを可能な限りクリーンにしたいと思います。

答えて

2

Visual Studioプロジェクトは、基本的にソースファイルのセットに応じてターゲットを構築するために作成されます。

静的ファイルのリストを表示するだけのプロジェクトはありません。カスタムターゲットを追加するとすぐに、CMakeは他のプロジェクトと互換性を保つためにプロジェクトの出力を盲目的に作成しようとしますバックエンドシステム。 CMakeが実際のターゲットを持たないUnix Makefileを作成した場合、それはMakefileではないでしょうか?

これを行う適切な方法は、ファイルを別の既存のプロジェクトに実際に追加することです。技術的に言えば、実行可能ファイルをビルドする場合、この実行ファイルは実行時に構成ファイルを読み込みます。これらのファイルは正当にはプロジェクトの一部です。

また、ソースファイルや設定ファイルのリストを表示するためにファイルグローブを使用することはお勧めできません。なぜなら、フォルダにファイルを追加すると、CMakeは新しいファイルが追加されたことを知ることができず、Visual Studioプロジェクトこれらのファイルを含むように再生成されません。代わりに、CMakeLists.txtファイルのすべてのファイルを一覧表示して、そこに新しいファイルを追加すると、cmakeファイルの再生成がトリガーされます。

最終的には、「クリーン」なプロジェクトが本当に必要な場合、CMakeは必要なツールではありません。生成するものはすべて一貫したビルドプロセスを維持するのに役立ちます。

+0

この洞察的な答えをありがとう。既存のプロジェクトにファイルを追加する私は自分自身に留意しました。しかし、問題は、プロジェクトが実際にプロジェクトの外部のフレームワークによって使用されるモジュール(動的ライブラリ、DLLなど)を実際に構築することです。ですから、おそらくconfigファイルを所属するモジュールに置くでしょう。いくつかは複数で使用されます。モジュールを使用するようにフレームワークを構成するファイルもあり、したがって、どのモジュールでも読み取られません。私はUnix Makefilesにとってこれは役に立たないと知っていますが、このプロジェクトの唯一の目的はconfigファイルをVSに追加することです。 – ahans

+0

@ahans複数のプロジェクトにもファイルを含めることはできません。ファイルが重複しないため、オーバーヘッドは最小限に抑えられます。 – SirDarius

+0

興味深い点。これは、フレームワークを構成するファイルの問題を解決しません。私はそれを心に留めておくだろう、ある時点で便利になるかもしれない。今のところ私は 'add_library'を使ってこれを解決しました。これはまさに私が望んでいたことです。 – ahans

関連する問題