2

実装する必要がある次のシナリオがあります。特定のディレクトリからすべてのソース ファイルを抽出する必要があります。したがって、特定のものを除外し、残りをコンパイルします。私はこのケースを次のように実装しています。

SOURCES = $(wildcard $(ROOT_DIR)/SRC/*.c)
FILTERED_SOURCES= $(filter-out $(ROOT_DIR)/SRC/File1.c, $(SOURCES))

ここで直面している問題は、File1.c が除外されていないことです。考えられる理由は、filter-out 関数で使用されるパターンが、スラッシュとドットを含む長いパス名であると予測しています。ここでの質問は

  1. パス全体ではなくファイル名だけを「SOURCES」に保存することは可能ですか
  2. filter-out コマンドで、記載されている以外に疑わしいものはありますか。
4

1 に答える 1

2

の値を出力しようとしましたSOURCESか? それとも、$(ROOT_DIR)空白が含まれていますか?

SOURCES := $(wildcard $(ROOT_DIR)/SRC/*.c)
$(error $(SOURCES))

abspath個人的には、関数を使用してすべてを絶対パスに変換し、結果のリストをフィルタリングします。

SOURCES          := $(abspath $(wildcard $(ROOT_DIR)/SRC/*.c))
FILTERED_SOURCES := $(filter-out $(abspath $(ROOT_DIR)/SRC/File1.c), $(SOURCES))

元のプレフィックスを使用するために戻るに$(ROOT_DIR)は (通常はオプションですが)、patsubstfunctionを使用できます。

SOURCES          := $(patsubst $(abspath $(ROOT_DIR))%,$(ROOT_DIR)%,$(SOURCES))
FILTERED_SOURCES := $(patsubst $(abspath $(ROOT_DIR))%,$(ROOT_DIR)%,$(FILTERED_SOURCES))
于 2012-09-06T21:11:03.050 に答える