2013-03-05 4 views
27

は、我々は読むことができます:CMakeの:代わりにset_target_propertiesのadd_definitions(ターゲットPROPERTIES COMPILE_DEFINITIONS定義)を使用する際にcmakeのドキュメントで

add_definitions

でソースのコンパイラコマンドラインに

追加フラグ

現在のディレクトリ以下。

COMPILE_DEFINITIONS property on directories

COMPILE_DEFINITIONS:ディレクトリのソースをコンパイルするためのプリプロセッサ定義。

COMPILE_DEFINITIONS property on targets

COMPILE_DEFINITIONS:ターゲットのソースをコンパイルするためのプリプロセッサ定義。

COMPILE_DEFINITIONS property on source files

COMPILE_DEFINITIONS:ソースファイルをコンパイルするためのプリプロセッサ定義。

COMPILE_DEFINITIONSおよびadd_definitionsの機能が重複しているようです。 COMPILE_DEFINITIONSプロパティはより柔軟に見えます。

したがって、COMPILE_DEFINITIONSプロパティは、すべてのadd_definitionsが実行するように見えます。

したがって、でなければなりません。なぜなら、COMPILE_DEFINITIONSプロパティは使用できないため、add_definitionsを呼び出しますか?

答えて

34

add_definitionsはCMakeの最初のビルドが10年以上前にオンラインになって以来、CMakeに存在していました。

COMPILE_DEFINITIONSは、それを実行するための、より新しい、より柔軟できめ細かな方法です。

世界中の既存のCMakeListsファイルの99%以上がadd_definitionsを使用しているため、削除することは賢明ではありません。 CMake開発者は、下位互換性を維持するために非常に懸命に働きます...時には明快さと単純さを損なう。そして時には本質的に同じことを複数の異なる方法でやっている。

So:add_definitionsは、既存のCMakeListsファイルを構成するのに、主にCOMPILE_DEFINITIONSが導入されて以来、周りにあったプロジェクトのために便利です。これらのプロジェクトはそれを使用しているので、CMakeListsファイルを読むことによって人々が学んだことに基づいている新しいプロジェクトも、add_definitionsを使用する可能性が非常に高いです。

しかし、COMPILE_DEFINITIONSだけで十分であれば、間違いないでしょう。

+7

これを知る方法を説明できますか?これはドキュメンテーションのどこかにありますか? CMakeの謎を理解するためには、何が読まなければならないのですか? – Praxeolitic

3

は、を使用する必要があります。

あなたの習慣の問題です。

いくつかの提言:

  • 使用add_definitionsあなたがソース現在のディレクトリに、以下のコマンドライン をコンパイラに追加します。それは タイプにちょうど短いです。

  • COMPILE_DEFINITIONSを使用して、ターゲットまたは特定の ソースを詳細に調整します。

+1

ありがとうございました。私の質問は、add_definitionsがどのような場合に有用であるかを理解することが多くなりました。なぜなら、COMPILE_DEFINITIONSプロパティは同じであり、さらに多くのことをするからです。 – Korchkidu

+0

私は、単純化したい理由の1つをadd_definitionを使って説明しました。フルコントロールをしたい - COMPILE_DEFINITIONでset_propertiesを使用する。 –

関連する問題