0

完全に機能する非常に単純な 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) $@ $(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 コマンドが出力に表示されないのはなぜですか? 明らかに、コンパイル中のモジュールごとにメッセージが表示されるはずです (Compiling ... done)。なぜそうではないのですか?

4

1 に答える 1

1

あなたのルールはまったく使用されていません。代わりに、make は組み込みのルールを使用しています。

これは、ファイルからファイル.cpp.oを作成する方法がサフィックス規則によって make に指示されるためです。ただし、コンパイルするファイルはすべてファイルであるため、定義したルールは役に立ちません。.o.cpp.c

.o代わりに、 aから aを構築するための make の組み込みルール.cが使用されており、もちろん、それらにはエコー コマンドが含まれていません。

于 2013-10-04T14:02:53.517 に答える