define
を関数として使用してMakefileを改善しようとしていますが、Make関数の定義に少し問題があります。私はそうあなたにデモMakefile:定義引数にテキスト変換関数を適用する
OBJ=obj/main.o \
obj/prompt.o
define buildMessage
src="$(patsubst $(OBJ_PREFIX)/%.o,%.c,$(1))"; \
obj="$(patsubst $(OBJ_PREFIX)/%.o,%.o,$(1))"; \
echo "$$src => $$obj"
endef
$(OBJ):
$(call buildMessage, "[email protected]")
$(CC) -o [email protected] -c $(patsubst $(OBJ_PREFIX)/%.o, $(SRC_PREFIX)/%.c, [email protected]) $(CFLAGS)
をお見せしましょう、ええ、私は派手なスタイルでビルドステップを印刷するには定義したいが、patsubst
がを定義して適用されていないようです。出力されます
obj/main.o => obj/main.o
obj/prompt.o => obj/prompt.o
patsubstが処理されたものの、変更や一致がない場合とまったく同じです。助言がありますか?
はアレックス、あなたがそれを示さなかったが、私は、それを想定してい
を 'SRC =' 'ではなく' OBJ_PREFIX'のSRC_PREFIX'を持っていないでしょうか? –
SRCが含まれているvarを持っていません。さらに、これは本当に投稿の問題ではありません。問題は、patsubstがその仕事をしていない理由です。 –
ちょっとメモ:これはmakefileを簡略化しません。結局のところ、メイクファイルに広範なマクロを使用すると、読みにくくなり、サポートしてくれるのはあなたがここで経験したことだけです。有用な時がありますが、実際の利益を提供しない限り、私はそれらを避けることを学んでいます。あなたの場合は、[静的パターンルール](https://www.gnu.org/software/make/manual/make.html#Static-Pattern)を使用して目標を達成することができます。 – blackghost