ターゲット
add_executable
一般に、ターゲットは、 oradd_library
を呼び出すことによって定義され、多くのプロパティを設定できる実行可能ファイルまたはライブラリで構成されます。
これらは相互に依存関係を持つことができます。これは、これらのようなターゲットの場合、依存関係が依存関係の後にビルドされることを意味します。
ただし、 を介して「カスタム ターゲット」を定義することもできますadd_custom_target
。ドキュメントから:
指定されたコマンドを実行する指定された名前のターゲットを追加します。ターゲットには出力ファイルがなく、コマンドがターゲットの名前でファイルを作成しようとしても、常に期限切れと見なされます。ADD_CUSTOM_COMMAND を使用して、依存関係のあるファイルを生成します。デフォルトでは、カスタム ターゲットに依存するものはありません。ADD_DEPENDENCIES を使用して、他のターゲットとの間で依存関係を追加します。
したがって、これらは、exe または lib を生成するものを表していないという点で「通常の」ターゲットとは異なりますが、依存関係の有無など、ターゲットが持つことができるすべてのプロパティの恩恵を受けます。それらは、構築可能なターゲットとして表示されます (例:make MyCustomTarget
またはmsbuild MyCustomTarget.vcxproj
)。それらを構築するときは、それらに設定されたコマンドを呼び出すだけです。それらが他のターゲット (通常またはカスタム) に依存している場合、これらが最初にビルドされます。
カスタム コマンド
経由で定義されたカスタム コマンドadd_custom_command
は、「ビルド可能な」オブジェクトではなく、ターゲットのように設定可能なプロパティがないという点でまったく異なります。 CMakeLists.txt。
これは基本的に、依存ターゲットを構築する前に呼び出されるコマンド (またはコマンドのセット) です。ここで「依存する」が実際に意味するのはそれだけです (少なくとも私はそう見ています) - A が B に依存している場合、A が構築される前に B が構築/実行されると言っているだけです。
カスタム コマンドの依存先は、フォームを使用して明示的に設定することも、add_custom_command(TARGET target ...
フォームを介して生成されたファイルを含むターゲットを作成することによって暗黙的に設定することもできますadd_custom_command(OUTPUT output1 ...
。
最初のケースでは、 がビルドされるたびtarget
に、カスタム コマンドが最初に実行されます。
2 番目のケースでは、もう少し複雑です。カスタム コマンドに、その出力ファイルに依存するターゲットがある場合 (および出力ファイルがまだ存在しない場合)、これらの依存オブジェクトが構築される前に呼び出されます。依存関係は、実行時に暗黙的に作成されます。たとえば、を介して生成されたファイルはadd_library(MyLib output1.h ... )
どこにありますか。output1.h
add_custom_command(OUTPUT output1.h ... )