Makefile覆盖自己

时间:2016-01-23 12:58:28

标签: c makefile

我编写了一个简单的半泛型Makefile来编译一个简单的C项目,然而,它会随机覆盖自己。这是调用make

的输出
clang  -g -O0 -march=native -Wall -Wextra -ansi -pedantic -c appley.c -o Makefile.o
clang   Makefile.o   -o Makefile
rm Makefile.o
Makefile:1: warning: NUL character seen; rest of line ignored
Makefile:1: *** missing separator.  Stop.

这是makefile:

CC      ?= gcc
DEBUG   ?= -g -O0 -march=native

CFLAGS  := $(CFLAGS) $(DEBUG) -Wall -Wextra -ansi -pedantic
LDFLAGS := $(LDFLAGS)
LDLIBS  := $(LDLIBS)

SRC     := appley.c
OBJ     := $(SRC:.c=.o)
SYM     := $(SRC:.c=.o.dSYM)
BIN     := appley

PREFIX  ?= /usr/local
BINDIR  := $(PREFIX)/bin

.PHONY: clean all

all: $(BIN)

$(BIN): $(OBJ)
    $(CC) $(LDFLAGS) $(LDLIBS) $(OBJ) -o $(BIN)

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

install: $(BIN)
    install -d $(BINDIR)
    install $(BIN) $(BINDIR)

clean:
    rm -rf $(OBJ) $(BIN)

$@如何成为Makefile.o?此外,$(BIN)如何成为Makefile
我相信它是通配符,因为没有它似乎工作正常。

编辑:它不是通配符,它​​将源文件保存在另一个TMUX窗格中的VIM中。在编译之后编译makefile。我正式混淆了。

1 个答案:

答案 0 :(得分:2)

模式规则通常在两边都有%。尝试替换它,

%.o: $(SRC)

有了这个,

%.o: %.c