3

だから私は変数を持っています:

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 ファイルを使用してターゲットをビルドします。

ここでかなり途方に暮れています。

4

1 に答える 1

5

静的パターンルールを使用します。

prog_objs = $($*_SRCS:.c=.o)

.SECONDEXPANSION:
$(ALL_PROGS) : %_prog : $$(prog_objs)
    gcc - blah blah
于 2012-05-21T19:26:30.280 に答える