Makefile在规则内仅执行一次回显

时间:2018-06-30 00:01:07

标签: if-statement makefile rules

我有这个Makefile

$(MAIN) : $(OBJECTS)

$(OBJECTS) : %.c
     compile file

我想使用printf来打印需要编译的文件,例如“ compiling”,如果要在每个编译的末尾编译文件,则要使用“ done”:

Compiling
file1.c
file2.c
file3.c
Done

我尝试使用shell中的if或makefile中的ifeq之类的句子 但是我需要一个变量,如果我不知道为什么,makefile不允许我在a内部更改变量的值。我该如何存档?

3 个答案:

答案 0 :(得分:0)

我想这就是你想要的:

 OBJECTS := file1.o file2.o file3.o

.PHONY: all compiling

all : $(OBJECTS)
    @echo Done

compiling:
    @echo Compiling

$(OBJECTS): file%.o : file%.c compiling
    @echo $<
    @compile $<

答案 1 :(得分:0)

我解决了将变量MODE初始化为0并将我的makefile分成两部分的问题,一部分检查是否已对某些内容进行了修改,在这种情况下,请更新失败,然后打印我的消息,然后执行{ {1}},我在其中执行普通的makefile,以更新所需的所有内容

感谢问题https://stackoverflow.com/a/51100086/10010027

中的Pacalet

答案 2 :(得分:0)

我同样需要在开始构建一堆PDF文件时打印一条消息,然后跳转以生成另一堆PNG文件。我使用了两个.INTERMEDIATE目标来防止d => `test: ${d.object.extraProps.occupancy}`被.PHONY目标文件“饿”(期待更新)。

该消息仅打印一次。

make

这在GNU make手册https://www.gnu.org/software/make/manual/html_node/Special-Targets.html

中有解释