Makefile利用函数,指定文件夹下面源文件(成百上千)生成目标文件。
时间: 2024-03-10 14:46:43 浏览: 140
可以使用Makefile中的函数和通配符来指定文件夹下的源文件并生成目标文件。
首先,可以使用函数`wildcard`来获取指定文件夹下的所有源文件,例如:
```makefile
SRC_DIR := src
SRCS := $(wildcard $(SRC_DIR)/*.c)
```
这里将所有以`.c`结尾的文件都存储在变量`SRCS`中。接下来,可以使用函数`patsubst`来将源文件名转换成目标文件名,例如:
```makefile
OBJ_DIR := obj
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))
```
这里将`SRCS`中的每个文件名都转换成以`.o`结尾的目标文件名,并将其存储在变量`OBJS`中。注意,这里使用了变量`$(SRC_DIR)`和`$(OBJ_DIR)`来指定源代码和目标代码所在的文件夹。
最后,可以使用`$(CC)`来指定编译器,并将`OBJS`作为依赖项来生成目标文件,例如:
```makefile
CC := gcc
CFLAGS := -Wall -Werror
myapp: $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
```
这里使用了变量`$(CC)`来指定编译器,变量`$(CFLAGS)`来指定编译选项,`$@`表示目标文件名,`$^`表示所有依赖项的列表。最后,使用目标`myapp`来生成目标文件。
相关问题
Makefile利用函数,指定文件夹下面源文件(成百上千)生成目标文件。
可以使用Makefile中的函数`wildcard`和`patsubst`来指定文件夹下的源文件并生成目标文件。
假设源文件存放在`src/`文件夹下,目标文件存放在`obj/`文件夹下,可以使用以下代码:
```
# 指定源文件所在文件夹
SRC_DIR := src
# 指定目标文件所在文件夹
OBJ_DIR := obj
# 使用wildcard函数获取SRC_DIR文件夹下的所有.c文件
SRCS := $(wildcard $(SRC_DIR)/*.c)
# 使用patsubst函数将SRCS中的.c文件替换成.o文件,存储到OBJS中
OBJS := $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRCS))
# 定义编译命令
CC := gcc
CFLAGS := -Wall
# 定义目标文件生成规则
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# 定义默认目标all,生成所有目标文件
all: $(OBJS)
# 定义清理命令
clean:
rm -f $(OBJS)
```
在终端中执行`make`命令即可生成所有目标文件。
linux利用函数,指定文件夹下面源文件(成百上千)生成目标文件。
在Linux环境下,如果你需要批量地将源文件(通常是以.c、.cpp等结尾的文件)编译为目标文件(.o),可以使用Makefile来管理这个过程。Makefile是一个文本文件,其中包含了描述如何从源代码生成目标文件的规则。
首先,你需要创建一个Makefile,它会包含类似这样的基本结构:
```makefile
CC = gcc # 编译器
SOURCES = $(wildcard *.c) # 使用通配符匹配当前目录下所有.c文件
OBJECTS = $(SOURCES:.c=.o) # 每个源文件对应一个目标文件
all: $(OBJECTS) # 当执行"make all"时,会编译所有的源文件
%.o: %.c # 定义编译规则
$(CC) -c $< -o $@
clean: # 清理生成的目标文件
rm -f *.o
.PHONY: clean
```
在这个例子中,`$(wildcard *.c)`会查找当前目录及其子目录下所有`.c`文件,并赋值给`SOURCES`变量。然后,`%.o: %.c`这一规则定义了当有`.c`源文件需要编译时,如何生成对应的`.o`目标文件。运行`make`或`make all`即可执行编译任务,`make clean`则用于清理编译后的临时文件。
阅读全文