どうやら、忍者はヘッダーを依存関係として扱うように構成する必要があります: https://ninja-build.org/manual.html#ref_headers。
これをbuild.ninjaに生成するようにCMakeに指示するにはどうすればよいですか?
どうやら、忍者はヘッダーを依存関係として扱うように構成する必要があります: https://ninja-build.org/manual.html#ref_headers。
これをbuild.ninjaに生成するようにCMakeに指示するにはどうすればよいですか?
OBJECT_DEPENDS
特定のファイルから作成されたオブジェクトの他のファイルへの依存関係を指定するために使用できるfile プロパティがあります。
ドキュメントから:
コンパイルされたオブジェクト ファイルが依存する追加のファイル。
;
このソース ファイルからコンパイルされたオブジェクト ファイルが依存するファイルへのフル パスのリストを指定します。Makefile ジェネレーターとNinjaジェネレーターでは、指定されたファイルのいずれかがそれよりも新しい場合、オブジェクト ファイルは再コンパイルされます。Visual Studio ジェネレーターとXcodeジェネレーターは、このようなコンパイルの依存関係を実装できません。このプロパティは、ソース ファイルがインクルードする生成済みヘッダー ファイルへの依存関係を指定するために使用する必要はありません。このプロパティはもともとこの目的で導入されましたが、もはや必要ではありません。生成されたヘッダー ファイルがソース ファイルと同じターゲットでカスタム コマンドによって作成された場合、自動依存関係スキャン プロセスは依存関係を認識します。生成されたヘッダー ファイルが別のターゲットによって作成された場合、コマンドを使用してターゲット間の依存関係を作成する必要があります
add_dependencies()
(リンク関係のためにまだ存在していない場合)。
特定のソース ファイルでこのプロパティを設定するには、次を使用します。
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"
GCC などの CMake で生成されたファイルを調べるbuild.ninja
と、必要な依存関係ファイルのエントリが自動的に生成されています (「参考文献」を参照DEP_FILE
)。
#=============================================================================
# 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
また、依存関係のチェックは期待どおりに機能します。touch
ヘッダーの依存関係の 1 つを変更するだけで、ninja
必要なソースが自動的に再構築されます。