makefile:使用其他目录中的输出编译文件

时间:2016-11-25 16:49:15

标签: makefile

我尝试编译许多文件并将输出放在其他目录中。我有这个Makefile

CC = gcc
BINDIR = bin
SRCDIR = src

SRCS = $(shell find $(SRCDIR) -name *.c)
BINS = $(patsubst $(SRCDIR)/%, $(BINDIR)/%, $(SRCS:.c=.exe))

all: $(BINS)

$(BINS): $(SRCS)
        @mkdir -p $(BINDIR)
        $(CC) -o $@ $<

clean:
        rm -rf bin

和这个目录结构

├── Makefile
└── src
    ├── bye.c
    └── hello.c

当我使用make时,我得到了这个

$ make
gcc -o bin/bye.exe src/bye.c
gcc -o bin/hello.exe src/bye.c

为什么两次都使用src/bye.c作为源文件?

修改

以及如何编译任何文件?

1 个答案:

答案 0 :(得分:0)

因为您的规则使用$<。如https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html中所述:

  

$<

     

第一个先决条件的名称。如果目标从隐式规则获得其配方,这将是隐式规则添加的第一个先决条件(请参阅Implicit Rules)。

src/bye.c$(SRCS)的第一个元素。