我已经编写了一个简单的、半通用的 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.
这是生成文件:
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
?
我相信这是通配符,因为没有它似乎工作正常。
Edit: 这不是通配符,它是将 VIM 中的源文件保存在另一个 TMUX 面板中。之后的编译会扰乱 makefile。我很困惑。
最佳答案
模式规则通常两边都有一个 %。尝试替换它,
%.o: $(SRC)
有了这个,
%.o: %.c
关于c - Makefile 覆盖自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963737/