makefile wildcard 怎么用举个例子
时间: 2023-07-11 17:52:49 浏览: 137
makefile中的通配符可以使用通配符字符(如*和?)来匹配一些文件名,以实现更加灵活的文件依赖关系。下面是一个使用通配符的示例:
```
# 查找当前目录下所有以.c结尾的文件
SRCS := $(wildcard *.c)
# 将.c文件编译成.o文件
OBJS := $(SRCS:.c=.o)
# 生成可执行文件
myprog: $(OBJS)
gcc -o $@ $^
# 清除生成的.o文件和可执行文件
clean:
rm -f $(OBJS) myprog
```
上面的示例中,使用 `wildcard` 函数查找当前目录下所有以 `.c` 结尾的文件,并将它们赋值给变量 `SRCS`。然后,使用变量替换功能将 `.c` 扩展名替换成 `.o`,生成 `.o` 文件列表,赋值给变量 `OBJS`。最后,使用 `OBJS` 变量作为依赖关系生成可执行文件。
注意,在使用通配符时,需要保证文件名中不存在空格等特殊字符,否则可能会导致错误。
相关问题
wildcard makefile
wildcard Makefile是一种特殊的Makefile编写技术,它利用了Unix shell的通配符功能,允许Makefile动态地处理未指定目标名的情况。在标准Makefile中,如果想要包含一组文件,通常需要手动列出每个文件的名字。然而,当有一组文件需要频繁更新,且文件名模式固定时,比如所有`.cpp`源文件或`.h`头文件,使用wildcard规则可以使Makefile更简洁、易维护。
例如,一个简单的Makefile片段可以这样编写:
```makefile
SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp,%.o,$(SOURCES))
all: $(OBJECTS)
%.o: %.cpp
gcc -c $< -o $@
clean:
rm -f *.o
```
在这个例子中,`$(wildcard *.cpp)`会匹配当前目录下所有的`.cpp`文件,并将它们保存在`SOURCES`变量中。`$(patsubst %.cpp,%.o,$(SOURCES))`则会根据这个模式生成对应的编译目标(`%.o`)。这样,每当有新的`.cpp`文件加入,Makefile就能自动识别并处理它们。
makefile动态库
Makefile是一种在Unix和Linux系统中常用的自动化构建工具,用于管理和组织软件项目的编译过程。对于创建动态库(也称为共享库),Makefile可以定义规则来链接源文件、编译对象文件、打包成.so文件等步骤。
在Makefile中,你可以定义一些变量,如CC(编译器)、LD(链接器)等,然后通过依赖规则(`.PHONY`或`%.o: %.c`这样的模式)指定当源文件发生变化时需要执行的操作,例如:
```makefile
libname := mylibrary
OBJECTS := $(basename $(wildcard *.c))
all: $(libname).so
$(libname).so: $(OBJECTS)
$(CC) -shared -o $@ $(OBJECTS)
%.o: %.c
$(CC) -c -Wall -o $@ $<
clean:
rm -f *.o $(libname).so
.PHONY: clean all
```
在这个例子中,当你运行`make`命令时,Makefile会检测源文件是否改变,如果改变则会编译对象文件并链接生成动态库。`clean`目标则用于清除所有编译产生的中间文件。