我有这些文件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)
但是,我收到此错误:
make: *** No rule to make target
缺省&#39 ;. Stop.`
我尝试了$make -v
并得到了:
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
我想我误解了他!那么,这里缺少什么?谢谢
答案 0 :(得分:2)
缺少的分隔符错误是因为您没有使用“配方”选项卡。
例如,你的TARGET目标有一个$(OBJECTS)的先决条件,一旦Make知道那里(或使它),那么它将继续进行配方。
$(TARGET): $(PREREQUISITES)
->(TAB) $(RECIPE)