我编写了一个简单的半泛型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。我正式混淆了。
答案 0 :(得分:2)
模式规则通常在两边都有%。尝试替换它,
%.o: $(SRC)
有了这个,
%.o: %.c