【问题标题】:Gnu make "clean" only removes .c files in OBJ/ASM variables [closed]Gnu make“clean”仅删除 OBJ/ASM 变量中的 .c 文件 [关闭]
【发布时间】:2020-09-05 11:39:25
【问题描述】:

我正在尝试删除所有以这种形式存储在变量中的 .o 、 .i 、 .asm 、 .d 文件:

OBJS := $(SRCS:.c=.o)
PP := $(SRCS:.c=.i)
ASM := $(SRCS:.c=.asm)
DEP := $(SRCS:.c=.d)

使用此代码:

SRCS = text1.c\
       text2.c
      

OBJS :=$(SRCS:.c=.o)
PP := $(SRCS:.c =.i)
ASM := $(SRCS:.c =.asm)
DEP := $(SRCS:.c =.d)


.PHONY : clean
clean :
    rm -f $(OBJS) $(PP) $(ASM) $(DEP)

但它只将 .o 应用于 $(OBJS),如下所示:

rm -f text1.o text2.o text1.c text2.c text1.c text2.c text1.c text2.c

我不明白为什么它没有用 *.i 或 *.asm 等替换 *.c 文件。

我用这个来解决它:

.PHONY: clean
clean:
    rm -f *.o *.i *.asm *.d

但我仍在学习“make”所以我想知道为什么第一个不起作用..提前谢谢你。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请查看我们的intro section,尤其是minimal complete examples 上的页面。我无法使用您向我们展示的代码重现您的问题。
  • 变量赋值中有错误的空格。例如,将$(SRCS:.c =.i) 替换为$(SRCS:.c=.i)

标签: gcc makefile gnu-make gnu


【解决方案1】:

等号后面不能有空格,否则它会尝试与名称中的空格匹配。

这是一个固定版本:

SRCS = text1.c text2.c

OBJS := $(SRCS:.c=.o)
PP   := $(SRCS:.c=.i)
ASM  := $(SRCS:.c=.asm)
DEP  := $(SRCS:.c=.d)

# Note this does not match due to the extra space
PP2   := $(SRCS:.c =.i)

.PHONY : clean
clean :
    rm -f $(OBJS) $(PP) $(ASM) $(DEP)

【讨论】:

  • 谢谢你的工作。我如何得到这些空白错误有点烦人,因为我确实在我的 source.mk 文件中得到了一个用于使用水龙头的错误。
  • @MohamedWehba 是的,makefile 因其空白错误而臭名昭著...
猜你喜欢
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多