だから私は変数を持っています:
PROGS = element0 \
element1
それぞれに変数があります:
element0_SRCS = src/xxx.c src/q.c
element1_SRCS = src/xxx.c src/z.c
別の変数セットがあれば、やりたいことをかなり簡単に行うことができます。
element0_OBJS = src/xxx.o src/q.o
element1_OBJS = src/xxx.o src/z.o
ALL_PROGS = $(foreach p, $(PROGS), $(p)_prog)
all : $(ALL_PROGS)
.SECONDEXPANSION:
%_prog : $$($$*_OBJS)
gcc - blah blah
ただし、「_OBJS」変数の必要性を排除し、_SRCS 変数を使用したいと考えています。私は各プログラムでこの個人を行うことができます:
element0_prog : $(element0_SRCS:.c=.o)
2 番目の展開を使用して %_prog ルールを再作成しようとするさまざまな試みは失敗しました。
$$($$*_SRCS:.c=.o)
==> ターゲット パターンに「%」が含まれていません
$$(patsubst %.c,%.o,$$($$*_SRCS))
==> .o ファイルの代わりに .c ファイルを使用してターゲットをビルドします。
ここでかなり途方に暮れています。