16

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

在 1 行中,如果我写

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

2 回答 2

23

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

于 2012-06-25T11:37:07.210 回答
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))
于 2014-06-05T05:01:01.373 回答