超级简单的Make-File回显不起作用

时间:2013-10-04 12:54:35

标签: makefile echo output

我写了一个非常简单的Make-File,效果很好。我的一些echo命令只是不起作用,我绝对不知道为什么会这样。

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) $@ $(OBJECTS) 

.cpp.o:
@echo Compiling ... 
$(CC) $(CFLAGS) $< -o $@
@echo done

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

所以make-process的输出是这样的:

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

为什么输出上没有所有echo命令?显然,每个正在编译的模块都应该打印一条消息(编译完成)。为什么不呢?

1 个答案:

答案 0 :(得分:1)

您的规则根本没有被使用。相反,make正在使用其内置规则。

这是因为您的后缀规则.cpp.o告诉您如何从.o文件构建.cpp文件。但是,您要编译的文件都是.c个文件,因此您定义的规则对此无用。

相反,正在使用make的内置规则来构建来自.o的{​​{1}},当然,这些规则中没有你的echo命令。