gpt4 book ai didi

Makefile 和通配符

转载 作者:行者123 更新时间:2023-12-04 02:21:48 26 4
gpt4 key购买 nike

好的,这是我当前的 makefile 设置。有文件名为 public01.c , public02.c等。我正在尝试使用 public*.o 为它们中的每一个制作目标文件。带有通配符的标签。

public*.o: public*.c hashtable.h
$(CC) $(CFLAGS) -c public*.c

public*: public*.o
$(CC) -o public* public*.o

但是,当我尝试运行 makefile 时,我得到以下信息:
make: *** No rule to make target `public*.c', needed by `public*.o'.  Stop.

我想它正在治疗 public*.c作为标签而不是我想要的通配符。我读过 $(wildcard pattern...)功能并玩弄它,但我并没有真正理解它或让它工作......

最佳答案

简答 :该语法无法按照您希望的方式工作。在 GNU make 语法中做你想做的正确方法是使用模式规则:

public%.o: public%.c hashtable.h
$(CC) $(CFLAGS) -c $<

public%: public%.o
$(CC) -o $@ $<

长答案 : 这个:
public*.o: public*.c hashtable.h

并不意味着你想要它的意思。假设你有几个文件 public01.c等,并且没有文件 public01.o等,在构建开始时,该语法等效于:
public*.o: public01.c public02.c public03.c ... hashtable.h

也就是说,如果 public01.o等,不存在,那么 make 将使用文字字符串 public*.o作为文件名。如果有的 .o文件确实存在,那么该语法等效于:
public01.o public02.o ...: public01.c public02.c ... hashtable.h

看起来像你想要的吗?但这是对 make 的常见误解,因为实际上该行与此完全相同:
public01.o: public01.c public02.c ... hashtable.h
public02.o: public01.c public02.c ... hashtable.h

即——每 .o文件依赖于每个 .c文件!做你想做的正确方法是使用模式规则,如上所示。

关于Makefile 和通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com