1

どうやら、忍者はヘッダーを依存関係として扱うように構成する必要があります: https://ninja-build.org/manual.html#ref_headers

これをbuild.ninjaに生成するようにCMakeに指示するにはどうすればよいですか?

4

2 に答える 2

1

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"
于 2016-08-29T04:57:05.273 に答える
0

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必要なソースが自動的に再構築されます。

于 2016-08-30T19:43:27.587 に答える