Makefile条件编译其子目录的某一个文件
时间: 2024-04-29 20:23:17 浏览: 7
可以使用条件编译指令来编译子目录中的某一个文件。下面是一个示例 Makefile:
```makefile
CC = gcc
CFLAGS = -Wall -Wextra
all: main
main: main.o foo.o bar.o
$(CC) $(CFLAGS) $^ -o $@
main.o: main.c
$(CC) $(CFLAGS) -c $< -o $@
foo.o: foo.c
$(CC) $(CFLAGS) -c $< -o $@
bar.o: bar.c
ifeq ($(BUILD_BAR),yes)
$(CC) $(CFLAGS) -c $< -DBUILD_BAR -o $@
else
@echo "Skipping $@"
endif
clean:
rm -f *.o main
```
在上面的示例中,我们通过条件编译指令 `ifeq ($(BUILD_BAR),yes)` 来判断是否需要编译 `bar.o` 文件。如果 `BUILD_BAR` 变量的值为 `yes`,则编译 `bar.c` 文件并定义宏 `BUILD_BAR`,否则跳过 `bar.o` 文件的编译。
在执行 make 命令时,可以通过设置 `BUILD_BAR` 变量的值来控制是否编译 `bar.o` 文件。例如:
```
$ make # 编译所有文件
$ make BUILD_BAR=yes # 编译 bar.o 文件
$ make clean # 清除所有生成的文件
```