通配符在makefile中的含义是什么?

时间:2012-06-25 06:31:25

标签: makefile

我在makefile教程中找到了以下几行,但是我的粗线有些问题。

在一行中,如果我写

program_C_SRCS:=$(*.c)

它不起作用。所以请告诉我是什么 在这里做的通配符。这个词是否仅限于makefile?

在教程中写道,第二行将执行测试替换。任何人都可以告诉我一些有关此文本替换的内容吗?

如果我的问题非常基础,请原谅我,因为我是新手来制作文件。

link of tutorial

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)

2 个答案:

答案 0 :(得分:12)

假设您有两个源文件。 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

这是substitution reference。它转换文本,用另一个子串替换一个子串。变量program_C_OBJ现在具有值foo.o bar.o

答案 1 :(得分:2)

在make文件中使用通配符函数是列出具有特定扩展名的所有源文件。例如:

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))