Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 超级简单使文件回显不起作用_Makefile_Echo_Output - Fatal编程技术网

Makefile 超级简单使文件回显不起作用

Makefile 超级简单使文件回显不起作用,makefile,echo,output,Makefile,Echo,Output,我已经编写了一个非常简单的Make文件,它可以完美地工作。只是我的一些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)

我已经编写了一个非常简单的Make文件,它可以完美地工作。只是我的一些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

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

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

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

取而代之的是make的内置规则,用于从
.c
构建
.o
,当然,这些规则中没有echo命令

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