2013-10-04 25 views
0

我寫了一個非常簡單的Make-File,它完美地工作。只是我的一些回聲命令不起作用,我絕對不知道這是爲什麼。超級簡單的Make-File回顯不起作用

LIBNAME=E2E.lib 

CC=gcc 
CFLAGS=-c -Wall 

AR=ar 
ARFLAGS=rvs 

SOURCES=E2E_P01.c E2E_P02.c Crc.c E2E.c 
OBJECTS=$(SOURCES:.c=.o) 

all: $(SOURCES) $(LIBNAME) clean 

$(LIBNAME): $(OBJECTS) 
$(AR) $(ARFLAGS) [email protected] $(OBJECTS) 

.cpp.o: 
@echo Compiling ... 
$(CC) $(CFLAGS) $< -o [email protected] 
@echo done 

clean: 
@echo Cleaning up all the object files ... 
rm *.o 
@echo done 
@sleep 5 

因此,一個化妝過程的輸出是這樣的:

gcc —c —Wall —c —o E2E_P01.o E2E_P01.c 
gcc —c —Wall —c —o E2E_P02.o E2E_P02.c 
gcc —c —Wall —c —o Crc.o Crc.c 
gcc —c —Wall —c —o E2E.o E2E.c 
ar rvs E2E.lib E2E_P01.o E2E_P02.o Crc.o E2E.o 
r— E2E_P01.o 
r— E2E_P02.o 
r— Crc.o 
r— E2E.o 
Cleaning up all the object files ... 
rm *.o 
done 

爲什麼不是所有的回顯命令的輸出?顯然,應該爲正在編譯的每個模塊打印一條消息(編譯完成)。爲什麼不是?

回答

1

您的規則根本沒有被使用。相反,make正在使用其內置的規則。

這是因爲您的後綴規則.cpp.o告訴如何從.cpp文件構建.o文件。但是,您要編譯的文件全部是.c文件,因此您定義的規則對此無用。

取而代之的是,使用內置的.o內置規則從.c開始使用,當然,它們中沒有回顯命令。