If statement Makefile在规则内只执行一次echo
我有这个MakefileIf statement Makefile在规则内只执行一次echo,if-statement,makefile,rules,If Statement,Makefile,Rules,我有这个Makefile $(MAIN) : $(OBJECTS) $(OBJECTS) : %.c compile file 我想使用printf来打印类似于“编译”的内容,只要文件需要编译,如果在每次编译结束时都编译了文件,则使用“完成”,例如: Compiling file1.c file2.c file3.c Done 我试过使用shell中的if或makefile中的ifeq这样的句子 但是我需要一个变量,如果我不知道为什么,makefile不允许我更改变量中变量的值。
$(MAIN) : $(OBJECTS)
$(OBJECTS) : %.c
compile file
我想使用printf
来打印类似于“编译”的内容,只要文件需要编译,如果在每次编译结束时都编译了文件,则使用“完成”,例如:
Compiling
file1.c
file2.c
file3.c
Done
我试过使用shell中的if
或makefile中的ifeq
这样的句子
但是我需要一个变量,如果我不知道为什么,makefile不允许我更改变量中变量的值。如何将其存档?我想这正是您想要的:
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 $<
OBJECTS:=file1.o file2.o file3.o
.冒牌货:全部
全部:$(对象)
@回音完成
汇编:
@回声编译
$(对象):文件%.o:文件%.c
@回音$<
@编撰$<
我解决了将变量模式
初始化为0并将生成文件分为两部分的问题,一部分检查是否修改了某些内容,在这种情况下,我打印消息失败,然后执行$(MAKE)模式=1
,其中我执行一个正常的生成文件,更新所有需要的内容
多亏了问题中的Renauld Pacalet我在开始构建一组PDF文件时也需要打印一条消息,然后跳转生成另一组PNG文件。我使用了两个.INTERMEDIATE目标来防止
使对.PHONY目标文件感到“饥饿”(期待更新)
消息将只打印一次
CC=gcc
OBJECTS := file1.o file2.o file3.o
.PHONY: all
all: $(OBJECTS) msg_compiling
$(OBJECTS): file%.o : file%.c msg_compiling
$(CC) -c -o $@ $<
.INTERMEDIATE: msg_compiling
msg_compiling:
@printf "\n Compiling \n"
CC=gcc
对象:=file1.o file2.o file3.o
冒牌货:全部
全部:$(对象)消息\u
$(对象):文件%.o:文件%.c msg\u
$(CC)-c-o$@$<
.中级:msg_
msg_编译:
@printf“\n正在编译\n”
这在GNU make手册中有解释,它或多或少起作用,因为为了解释我的问题,我只说了很少的信息。我的真实情况是,我没有编译对象,我正在创建一个库,然后我使用.PHONY
规则创建我的库,以便在每次我做任何修改时检查,如果库中的任何源已被修改,那么我想要的是,“compiling”和“Done”消息仅在库正在编译(或更新)时出现而不是在库已经更新时