c - Makefile 覆盖自身

标签 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.

这是生成文件:

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/

相关文章:

在 shell 中重定向输入和输出的代码

c - 从附加的 for 循环访问 for 循环索引变量

c - 如何确保 fgets 准确接受带前导 0 的数字?

C++ makefile 同时分离声明和实现

opencv - 使用Cygwin编译OpenCV Android

c - Makefile - 在不进行任何更改的情况下编译库和可执行文件

c++ - 不用每次都编译使用alglib

C 写串行,重定向到文件,终止

c - 在 C 中处理数字

c - Makefile:一个命令输入多个文件