2016-08-28 19 views

答えて

0

#============================================================================= 
# Object build statements for EXECUTABLE target MyExe 

build CMakeFiles/MyExe.dir/foo.cc.obj: CXX_COMPILER ../foo.cc 
    DEP_FILE = CMakeFiles/MyExe.dir/foo.cc.obj.d 
    FLAGS = -fdiagnostics-color=always -Wconversion 
    OBJECT_DIR = CMakeFiles\MyExe.dir 
    OBJECT_FILE_DIR = CMakeFiles\MyExe.dir 

そして、期待どおりに動作を確認し、依存関係を:GCCは、私は(DEP_FILEを参照)が自動的に生成され、必要な依存関係ファイルエントリを持っています。ただtouchまたはヘッダー依存関係の1つを変更し、ninjaが自動的に必要なソースを再構築します。

+0

ありがとうフロリアン。私は実際には自分の答えを投稿する途中で、これは自分の問題ではないことを説明していました。実際、私はファイル名の中の[と]文字と関係があるCMakeのバグに襲われました。私はあなたの答えを受け入れるでしょう、それは他人に役立つかもしれません。 – user357269

+0

@ user357269よろしくお願いいたします。潜在的なファイル名の落とし穴についての警告に感謝します。 – Florian

1

ファイル属性OBJECT_DEPENDSがあります。これは、特定のファイルから作成されたオブジェクトの他のファイルへの依存関係を指定するために使用できます。

the docsから:コンパイルされたオブジェクトファイルが依存する

追加のファイル。

; - このソースファイルからコンパイルされたオブジェクトファイルが依存するファイルへのフルパスのリストを指定します。 メイクファイルジェネレータNinjaジェネレータは、指定されたファイルのいずれかがそれより新しい場合、オブジェクトファイルが再コンパイルされます。 Visual Studio GeneratorsおよびXcodeジェネレータは、このようなコンパイルの依存関係を実装できません。

このプロパティを使用して、生成されたヘッダファイルに含まれるソースファイルの依存性を指定する必要はありません。プロパティは、もともとこの目的のために導入されましたが、もはや必要ではありません。生成されたヘッダーファイルが、ソースファイルと同じターゲット内のカスタムコマンドによって作成された場合、自動依存スキャンプロセスは依存関係を認識します。生成されたヘッダーファイルが別のターゲットによって作成された場合は、add_dependencies()コマンドを使用してターゲット間依存関係を作成する必要があります(リンク関係のために存在しない場合)。

与えられたソースファイル、使用にこのプロパティを設定するには:私は、例えばのためにCMakeで生成された私のbuild.ninjaファイルに見れば

set_property(SOURCE first.cpp second.cpp 
      APPEND PROPERTY OBJECT_DEPENDS "${PROJECT_SOURCE_DIR}/inc/header1.h;${PROJECT_SOURCE_DIR}/inc/header2;${PROJECT_SOURCE_DIR}/inc/global_deps.h" 
+1

ありがとうございますが、これは私が探しているものではありません。忍者のdep/depfileコマンド(上記の私のリンクを参照)を使用して、すべてのソースファイルに対してこれを自動的に行うことができるはずです – user357269

関連する問題