2013-10-04 3 views
0

Я написал очень простой Make-файл, который отлично работает. Просто некоторые из моих эхо-команд просто не работают, и я не знаю, почему это так.Super simple Make-File echoing не работает

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 

Почему не все эхо-команд на выходе? Очевидно, должно быть напечатано сообщение для каждого компилируемого модуля (Compiling ... done). Почему не так?

ответ

1

Ваше правило не используется вообще. Вместо этого make использует свои встроенные правила.

Это потому, что ваше правило суффикса .cpp.o сообщает, как создать файл .o из файла .cpp. Но файлы, которые вы хотите скомпилировать, - это все файлы .c, поэтому указанное вами правило бесполезно для этого.

Вместо этого используются встроенные правила make для построения .o от .c, и у этих, конечно же, нет ваших команд эха.

Смежные вопросы