makefile中的Echo

makefile中的Echo,makefile,gnu-make,Makefile,Gnu Make,试图找到在makefile中打印信息的简单方法。底部显示了我的简单makefile 行$(信息aaa)打印aaa精细。 但是行回显“aaa”创建错误***缺少分隔符 是否可以在makefile中使用echo打印信息 CC=gcc CFLAGS=-I. DEPS = f1.h,hellomake.h echo 'aaa' $(info aaa) %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: helloma

试图找到在
makefile
中打印信息的简单方法。底部显示了我的简单
makefile

$(信息aaa)
打印
aaa
精细。 但是行
回显“aaa”
创建错误
***缺少分隔符

是否可以在
makefile
中使用echo打印信息

CC=gcc
CFLAGS=-I.
DEPS = f1.h,hellomake.h

echo 'aaa'
$(info aaa)

%.o: %.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

hellomake: hellomake.o hellofunc.o f1.o 
        gcc -o hellomake hellomake.o hellofunc.o f1.o -I.
CC=gcc
CFLAGS=-I。
DEPS=f1.h,hellomake.h
回声“aaa”
$(信息aaa)
%.o:%.c$(DEPS)
$(CC)-c-o$@$<$(CFLAGS)
hellomake:hellomake.o hellofunc.o f1.o
gcc-o hellomake hellomake.o hellofunc.o f1.o-I。

生成文件不是逐行执行的,而是关于规则依赖关系的。您的echo语句不属于某个规则,但
make
认为它应该属于该规则,因此会显示错误消息


如果您希望生成独立于任何依赖项的常规输出,
$(info…
(或
$(warning…
)是一种方法。

您可以在
生成文件中使用类似的技巧:

a = $(shell echo abc)
$(info $(a))

您可以创建一个
sayhello
目标:

.PHONY: sayhello
sayhello:
        echo 'aaa'
hellomake: hellomake.o hellofunc.o f1.o sayhello
        gcc -o hellomake hellomake.o hellofunc.o f1.o -I.
现在,您可以运行
makesayhello
来执行
echo'aaa'
命令

虚假目标不是文件名;相反,它只是当您发出显式请求时要执行的配方的名称

sayhello
目标还可以用作
hellomake
目标的子例程:

.PHONY: sayhello
sayhello:
        echo 'aaa'
hellomake: hellomake.o hellofunc.o f1.o sayhello
        gcc -o hellomake hellomake.o hellofunc.o f1.o -I.

afaik-
echo
必须在规则范围内。同意下面的Matthias,您的
makefile
不会逐行解释<代码>规则是定义
makefile