Makefile脚本无法正常运行

Makefile脚本无法正常运行,makefile,Makefile,我有这些文件main.c,fun.c,和fun.h。我想使用makefile脚本来运行,而不是传统的编译方法。发布以下makefile脚本的人说,该脚本将自动捕获同一目录中的文件名,因此我只需导航到项目目录并写入终端$make。我创建了一个文件makefile,并放入以下脚本: TARGET = prog LIBS = -lm CC = gcc CFLAGS = -g -Wall .PHONY: default all clean default: $(TARGET) all: defaul

我有这些文件
main.c
fun.c
,和
fun.h
。我想使用
makefile
脚本来运行,而不是传统的编译方法。发布以下makefile脚本的人说,该脚本将自动捕获同一目录中的文件名,因此我只需导航到项目目录并写入终端
$make
。我创建了一个文件
makefile
,并放入以下脚本:

TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall

.PHONY: default all clean

default: $(TARGET)
all: default

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)

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

.PRECIOUS: $(TARGET) $(OBJECTS)

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) -Wall $(LIBS) -o $@

clean:
    -rm -f *.o
    -rm -f $(TARGET)

我想我误解了他!好心的,这里少了什么?谢谢

缺少分隔符错误是因为您没有使用“配方”选项卡

例如,您的目标有一个$(OBJECTS)的先决条件,一旦Make知道(或使其)存在,那么它将继续执行配方

    $(TARGET): $(PREREQUISITES)
    ->(TAB) $(RECIPE)

缺少分隔符错误是因为您没有使用“配方”选项卡

例如,您的目标有一个$(OBJECTS)的先决条件,一旦Make知道(或使其)存在,那么它将继续执行配方

    $(TARGET): $(PREREQUISITES)
    ->(TAB) $(RECIPE)

生成文件不是脚本。。。我会考虑使用它们非常传统(但是你的方法只是编译名为<代码> *.c/c>绝对不是很传统的……)你的<代码>默认目标BTW在这个Mag文件中根本没有任何用途。为什么不把
all:$(TARGET)
作为第一条规则来写呢?我觉得这似乎是正确的,请记住,在Makefile中,这些空格(按顺序为4个空格)必须是制表符('\t')。您需要将其重命名为Makefile,或者makefileNope,默认情况下
make
只会查找
GNUmakefile
Makefile
,然后按该顺序创建文件。更改它或使用
make-f makefile.make
。makefile不是脚本。。。我会考虑使用它们非常传统(但是你的方法只是编译名为<代码> *.c/c>绝对不是很传统的……)你的<代码>默认目标BTW在这个Mag文件中根本没有任何用途。为什么不把
all:$(TARGET)
作为第一条规则来写呢?我觉得这似乎是正确的,请记住,在Makefile中,这些空格(按顺序为4个空格)必须是制表符('\t')。您需要将其重命名为Makefile,或者makefileNope,默认情况下
make
只会查找
GNUmakefile
Makefile
,然后按该顺序创建文件。更改它或使用
make-f makefile.make
。更正。我也发现了。谢谢你没问题,我会只是发表评论,但没有代表!玩得高兴对的我也发现了。谢谢你没问题,我会只是发表评论,但没有代表!玩得高兴