22

OpenCL プログラムの配布を簡素化するために cmake を使用しようとしています。複数のヘッダーやその他のソース ファイルを含むカーネル ファイルがあり、単一の自己完結型の実行可能ファイルが必要です。

私の計画は、cmakeにカーネル ソースでCプリプロセッサを実行させ、cl ファイルとそのインクルードを操作しやすい単一のユニットに変換することです。

-E を指定して gcc/clang を呼び出して add_custom_command を使用できますが、コマンドでさまざまなヘッダー ファイルを見つけるための適切なディレクトリを含めるためのフラグを取得できません。コンパイラへのカスタム呼び出しで使用する現在のインクルード ディレクトリをすべて検索します。

現在の cmake 環境でファイルに対してCプリプロセッサのみを実行する方法はありますか?

4

4 に答える 4

21

CMakeは、前処理ファイルのmakeターゲットを自動的に生成します。foo.cプロジェクト内のそれぞれにfoo.i、プリプロセッサのみを実行するmakeターゲットがあります(関連するすべての-Dフラグ-Iなどを含む)。実行make helpして、CMakeがmakefileで生成する他のすべての潜在的に有用なターゲットを確認します。

ところで、この「単一ユニット」がどのように使いやすくなるかわかりません。

于 2012-05-14T12:49:05.157 に答える
2

これは大雑把なハックですが、「このコマンドは任意のフラグを追加するために使用できますが、元々はプリプロセッサ定義を追加することを目的としていた」ため、add_definition を悪用できます。

または、ターゲットの COMPILE_FLAGS プロパティを「-E」に設定することもできます。これにより、同じ効果が得られますが、そのターゲットに対してローカルになります。

于 2012-05-02T11:37:00.053 に答える
0

別のアプローチをお勧めします。

  1. カーネルをバイナリにビルドします (ATI Stream の例: http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=115 )

  2. このバイナリ データをプログラムにコンパイルし (char[] blob として)、プログラムの開始時にロードします。

cmake とカスタム ターゲットを使用すると、これは非常に簡単になります。

于 2010-08-28T14:34:49.907 に答える