在生成文件中回显

vic*_*ico 5 makefile gnu-make

试图找到在makefile. 底部显示了我的简单makefile.

线条 $(info aaa)打印aaa良好。但是线 echo 'aaa'会产生错误*** missing separator

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

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.
Run Code Online (Sandbox Code Playgroud)

And*_*sev 8

您可以在您的Makefile

a = $(shell echo abc)
$(info $(a))
Run Code Online (Sandbox Code Playgroud)


Mat*_*ias 5

Makefile 不是逐行执行的,而是关于规则依赖性的。您的 echo 语句不属于规则,但make认为它应该,因此是错误消息。

我想生成一个独立于任何依赖项的通用输出,$(info ...)(或$(warning ...))是要走的路。


ser*_*gej 5

您可以创建一个sayhello目标:

.PHONY: sayhello
sayhello:
        echo 'aaa'
Run Code Online (Sandbox Code Playgroud)

现在您可以运行make sayhello以执行echo 'aaa'命令。

虚假目标不是真正的文件名;相反,它只是在您提出明确请求时要执行的配方的名称。

https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html

sayhello目标也可以作为一个子程序中的hellomake目标:

hellomake: hellomake.o hellofunc.o f1.o sayhello
        gcc -o hellomake hellomake.o hellofunc.o f1.o -I.
Run Code Online (Sandbox Code Playgroud)