Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile:多个目标的相同规则_Makefile - Fatal编程技术网

Makefile:多个目标的相同规则

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)

我有一些目标(比如说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) $(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)