1

ネストされた Makefile を使用してビルドする大規模なプロジェクト (〜 3x10^6 行のコード) に取り組んでいます。すべてのサブディレクトリを (おそらく並行して) 操作するためのいくつかの便利なルールを追加するファイル ( subdirs.mk) があります。次のルールが含まれます。

$(SUBDIRS_INCLUDES):
$(MAKE) -C $(patsubst %-includes,%,$@) includes

SUBDIRS_INCLUDES := $(patsubst %,%-includes,$(SUBDIRS))

includes: $(SUBDIRS_INCLUDES)

installcleantestなどについても同様のルールを提供します。

上位レベルの Makefile の 1 つに、次のコードがあります。

SUBDIRS = dir1 dir2 dir3
include $(BUILD_TOOLS)/subdirs.mk

includes: $(BUILD_DIR)/version.h

この場合、includesターゲットは$(BUILD_DIR)/version.hのみを作成し、すべてのサブディレクトリでのインクルードの実行をスキップします。testただし、他の便利な機能 (前述の機能とinstallターゲット機能) を提供するので、subdirs.mk を引き続き使用したいと考えています。

includesターゲットから依存関係をクリアする方法はありますか?

4

2 に答える 2

3

includes2 つのターゲットの 1 つ以外に別の名前を使用します。Make には、依存関係を「差し引く」または「削除する」という概念はありません。

于 2013-01-24T21:31:31.733 に答える
0

Silicon Graphics (SGI) の Unix バリアントである Irix は、含まれるすべてのルールの先頭にある subdirs.mk ファイルに相当する変数を提供することで、この問題を解決しました。次に、subdirs.mk をインクルードする前に、すべての子 makefile でこのプレフィックスを設定します。

理解しなければならないことはたくさんありますが、次のファイルcommondefscommonrulesが探している解決策を提供します。

于 2013-01-24T23:06:14.817 に答える