我在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)
答案 0 :(得分:12)
假设您有两个源文件。 foo.c
和bar.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))