明らかに、Ninjaはヘッダーを依存関係として扱うように構成する必要があります。https://ninja-build.org/manual.html#ref_headersヘッダーが変更されたときに忍者に設定を変更しますか?
これを私のbuild.ninjaに生成するにはどうすればよいですか?
明らかに、Ninjaはヘッダーを依存関係として扱うように構成する必要があります。https://ninja-build.org/manual.html#ref_headersヘッダーが変更されたときに忍者に設定を変更しますか?
これを私のbuild.ninjaに生成するにはどうすればよいですか?
#=============================================================================
# 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
が自動的に必要なソースを再構築します。
ファイル属性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"
ありがとうございますが、これは私が探しているものではありません。忍者のdep/depfileコマンド(上記の私のリンクを参照)を使用して、すべてのソースファイルに対してこれを自動的に行うことができるはずです – user357269
ありがとうフロリアン。私は実際には自分の答えを投稿する途中で、これは自分の問題ではないことを説明していました。実際、私はファイル名の中の[と]文字と関係があるCMakeのバグに襲われました。私はあなたの答えを受け入れるでしょう、それは他人に役立つかもしれません。 – user357269
@ user357269よろしくお願いいたします。潜在的なファイル名の落とし穴についての警告に感謝します。 – Florian