0

CMakeを使用してVisualStudio2008のソリューションファイルを生成しています。ライブラリと実行可能ファイルをビルドする通常のソースプロジェクトに加えて、構成ファイルのみを含むプロジェクトが必要です。これらのファイルは、実行時にプロジェクトの動作を構成するために使用されます。プロジェクトのビルドには必要ありませんが、ソリューションに含めることで、これらのファイルを簡単に編集できます。私は次のようにこれを達成することができましたadd_custom_target

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. add_custom_targetは、私が望むことを達成するための正しい方法ですか?そうでない場合、より良い解決策は何でしょうか?
  2. それが正しい方法である場合、どうすればターゲットの名前へのリンクを取り除くことができますか?また、構成プロジェクトをできるだけクリーンにするために、「CMakeRules」フォルダーを削除したいと思います。
4

1 に答える 1

2

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

カスタムターゲットを追加するとすぐに、CMakeは他のバックエンドシステムとの互換性を維持するために、プロジェクトの出力をやみくもに作成しようとするため、静的ファイルのセットを一覧表示するためだけにプロジェクトが存在することはお勧めしません。CMakeが実際のターゲットなしでUnixMakefileを作成したとしたら、それはMakefileでさえありませんね。

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

また、ファイルグロビンを使用してソースファイルまたは構成ファイルを一覧表示することはお勧めしません。フォルダーにファイルを追加すると、CMakeは新しいファイルが追加されたことを知る方法がなく、VisualStudioプロジェクトが再生成されないためです。それらのファイルを含めます。代わりに、CMakeLists.txtファイル内のすべてのファイルをリストして、そこに新しいファイルを追加すると、cmakeファイルの再生成がトリガーされるようにする必要があります。

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

于 2012-05-15T08:30:14.233 に答える