【发布时间】:2021-03-27 20:23:06
【问题描述】:
我正在尝试编写一个规则,将一组 .c 文件替换为一个变量的 .o 文件。
为了确保它有效,我在呼应他们的价值观。 .c 文件是通过 shell 通配符从当前工作目录获取的
sources := *.c
但是,.o 文件没有打印任何内容,因为无论我使用 patsubst 还是更方便的 $(src:%.c=%.o) 似乎都没有为此扩展“源” .
另一方面,如果我设置“手动”的值,一切都会按预期工作,例如
sources := source1.c source2.c source3.c
生成文件:
sources := *.c
srcs = one.c two.c
objects := $(sources:.c=.o)
objs := $(patsubst %.c, %.o, $(srcs))
prints:
@echo sources
@echo $(sources)
@echo objects
@echo $(objects)
@echo $(objs)
输出:
sources
source1.c source2.c source3.c source4.c
objects
*.o
one.o two.o
如您所见,“objects”(基于使用通配符的“sources”)是不可行的,但“objs”(基于手动设置的“srcs”可以正常工作)。
我错过了什么。我知道这一定与扩张发生的时间或方式有关。
【问题讨论】: