13

私はいくつかのターゲットを持っています (3 としましょう)。したがって、メイクファイルが実行された後、3 つの実行可能ファイルが必要になります。

これが私が今までにやったことです:

CC      = gcc
CFLAGS  = -Wall -pedantic -ansi

ECHO  = server_echo
ECHO_O = echo.o

FOO = server_foo
FOO_O = foo.o

ALL = $(ECHO) $(FOO)
ALL_O = ECHO_O FOO_O

all: $(ALL) 

$(ECHO): $(ECHO_O)
        $(CC) $(CFLAGS) -o $(ECHO) $(ECHO_O)

$(FOO): $(FOO_O)
        $(CC) $(CFLAGS) -o $(FOO) $(FOO_O)

.PHONY: clean
clean:         
        - rm -f $(ALL)
        - rm -f *.o
        - rm -f core

%.o: %.c
        $(CC) $(CFLAGS) -c $<

.PHONY: mci
mci: clean $(ALL) 

ターゲット $(ECHO) および $(FOO) のルールの複製があります。重複をなくす方法はありますか?何かのようなもの:

for target, target_o in $(ALL), $(ALL_O)
target: target_o
    $(CC) $(CFLAGS) -o target target_o
end for

または、私の問題を解決する別の方法はありますか?

ご協力いただきありがとうございます

4

2 に答える 2

18

Nothing easier:

$(ECHO): $(ECHO_O)
$(FOO): $(FOO_O)

$(ECHO) $(FOO):
        $(CC) $(CFLAGS) -o $@ $^

Or you can do away with the variables ECHO_O and FOO_O entirely with a static pattern rule:

$(ECHO) $(FOO): % : %.o
        $(CC) $(CFLAGS) -o $@ $^
于 2013-10-08T22:07:58.723 に答える