我有這些文件main.c
,fun.c
和fun.h
。我想使用makefile
腳本來運行而不是傳統的編譯方式。發佈以下makefile腳本的人表示,此腳本會自動捕獲同一目錄中的文件名,所以我只需導航到項目目錄並在終端$ make
中寫入。我創建了一個文件makefile
,把下面的腳本: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 [email protected]
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected]
clean:
-rm -f *.o
-rm -f $(TARGET)
不過,我得到這個錯誤: make: *** No rule to make target
默認」。 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
我想我誤會他了!請問,這裏缺少什麼?謝謝
Makefiles是**不是**腳本...我會考慮使用它們**非常傳統(但是您只是編譯任何名爲'* .c'的方法絕對不是傳統的...) –
你的'默認'目標btw在這個Makefile中根本沒有任何用處。爲什麼不直接寫'all:$(TARGET)'作爲第一條規則? –
對於我來說,看起來是正確的,只要記住,在Makefile中,那些空格(按順序4個空格)必須是標籤('\ t')。 – Amadeus