Makefile:多个目标的相同规则
我有一些目标(比如说3个)。所以在makefile运行之后,我想要3个可执行文件 以下是我现在所做的:Makefile:多个目标的相同规则,makefile,Makefile,我有一些目标(比如说3个)。所以在makefile运行之后,我想要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 = 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): $(ECHO_O)
$(FOO): $(FOO_O)
$(ECHO) $(FOO):
$(CC) $(CFLAGS) -o $@ $^
或者,您也可以完全通过以下方法消除变量ECHO_O
和FOO_O
:
对于更大一点的规则,或可能是有用的
下面是一个未经测试的调用函数示例:
define COMPILE =
$(CC) $(CFLAGS) -o $(2) $(1)
endef
$(ECHO): $(ECHO_O)
$(call COMPILE,$^,$@)
$(FOO): $(FOO_O)
$(call COMPILE,$^,$@)
以下是一个未经测试的罐装配方示例:
define COMPILE =
$(CC) $(CFLAGS) -o $@ $^
endef
$(ECHO): $(ECHO_O)
$(COMPILE)
$(FOO): $(FOO_O)
$(COMPILE)
这些示例包含以及
以防万一,其中一个链接指向我觉得有用的教程:
define COMPILE =
$(CC) $(CFLAGS) -o $(2) $(1)
endef
$(ECHO): $(ECHO_O)
$(call COMPILE,$^,$@)
$(FOO): $(FOO_O)
$(call COMPILE,$^,$@)
define COMPILE =
$(CC) $(CFLAGS) -o $@ $^
endef
$(ECHO): $(ECHO_O)
$(COMPILE)
$(FOO): $(FOO_O)
$(COMPILE)