我有一些目标(可以说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)
Run Code Online (Sandbox Code Playgroud)
对于目标$(ECHO)和$(FOO),我有重复的规则。有什么办法可以消除重复吗?就像是:
for target, target_o in $(ALL), $(ALL_O)
target: target_o
$(CC) $(CFLAGS) -o target target_o
end for
Run Code Online (Sandbox Code Playgroud)
还是有其他方法可以解决我的问题?
谢谢你的帮助
没有比这更简单的了:
$(ECHO): $(ECHO_O)
$(FOO): $(FOO_O)
$(ECHO) $(FOO):
$(CC) $(CFLAGS) -o $@ $^
Run Code Online (Sandbox Code Playgroud)
或者,您可以完全不使用变量,ECHO_O而可以FOO_O完全使用静态模式规则:
$(ECHO) $(FOO): % : %.o
$(CC) $(CFLAGS) -o $@ $^
Run Code Online (Sandbox Code Playgroud)