在makefile中,通配符是什么意思?

21
我在一个makefile教程中找到了以下几行内容,但是对于加粗的部分有些困惑。
在一行中,如果我写:

program_C_SRCS:=$(*.c)

它不起作用。请告诉我,这里做什么的通配符是什么意思。这个词只适用于makefile吗?

在教程中写道,第二行将执行测试替换。有人能告诉我一些关于这个文本替换的内容吗?

如果我的问题很基础,请原谅,因为我是新手。

教程链接

CC:=g++
program_NAME:=myprogram
**program_C_SRCS:=$(wildcard *.c)**  # 1 line 
program_CXX_SRCS:=$(wildcard *.cc)
**program_C_OBJ:=$(program_C_SRCS:.c=.o)** # 2 line
program_CXX_OBJ:=$(program_CXX_SRCS:.c=.o)
program_OBJ:= $(program_C_OBJ) $(program_CXX_OBJ)

1
链接似乎已经失效。 - jgh fun-run
2个回答

36

假设您有两个源文件,foo.cbar.c

program_C_SRCS:=$(wildcard *.c) # 1 line

wildcard 函数是 Make 语法中的一部分。变量 program_C_SRCS 现在将具有值 foo.c bar.c(可能不是按照这个顺序)。

program_C_OBJ:=$(program_C_SRCS:.c=.o) # 2 line

这是一个替换引用。它可以转换文本,将一个子字符串替换为另一个。变量program_C_OBJ现在的值是foo.o bar.o


3
在 makefile 中使用通配符函数是为了列出所有具有特定扩展名的源文件。例如:
program_C_SRCS:=$(*.c) // In this the variable program_C_SRCS will have all the files with ".c" extension.

假设您想将 .c 文件转换为 .o 文件,则以下语法可能会有用:
program_C_OBJS:=$(patsubst %.c,%.o,$(wildcard *.c))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接