Linux Makefile文件详解(4)
Linux
16. 自动生成依赖关系
使用 -M 选项可以让编译器自动生成依赖关系。这对于跟踪头文件之间的依赖关系很有帮助。
# 自动生成依赖关系
%.d: %.c
$(CC) -M $< > $@
17. include 指令
使用 include 指令可以将其他 Makefile 文件包含进当前 Makefile 中。
# 包含其他 Makefile 文件
include other.mk
18. 示例
下面是一个简单的 C 语言项目的 Makefile 示例:
CC = gcc
CFLAGS = -Wall
LDFLAGS =
SRCDIR = src
OBJDIR = obj
BINDIR = bin
SOURCES = $(wildcard $(SRCDIR)/*.c)
OBJECTS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES))
EXECUTABLE = $(BINDIR)/my_program
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -rf $(OBJDIR)/*.o $(EXECUTABLE)
这个 Makefile 文件描述了一个简单的项目结构,其中源文件位于src目录,目标文件位于obj目录,可执行文件位于bin目录。这个 Makefile 包含了all(默认目标)、clean(清理目标)等规则。
19. 函数
Makefile 支持一些内建的函数,用于处理字符串、路径等。常用的函数包括 $(wildcard), $(patsubst), $(foreach), 等等。
# 获取所有.c文件的列表
C_FILES = $(wildcard src/*.c)
# 将.c文件替换成.o文件
O_FILES = $(patsubst src/%.c, obj/%.o, $(C_FILES))
# 使用foreach迭代
SOURCES = file1.c file2.c file3.c
OBJECTS = $(foreach src, $(SOURCES), obj/$(src:.c=.o))
20. 条件语句
Makefile 中可以使用条件语句,根据不同的条件执行不同的指令。
# 条件语句
ifeq ($(DEBUG),1)
CFLAGS += -g
else
CFLAGS += -O2
endif
21. 递归调用
Makefile 可以通过递归调用来构建子目标。
# 递归调用
subtarget:
$(MAKE) -C subdir
22. 示例
下面是一个包含多个源文件、头文件以及库文件的 Makefile 示例:
CC = gcc
CFLAGS = -Wall
LDFLAGS =
SRCDIR = src
INCDIR = include
OBJDIR = obj
BINDIR = bin
LIBDIR = lib
SOURCES = $(wildcard $(SRCDIR)/*.c)
HEADERS = $(wildcard $(INCDIR)/*.h)
OBJECTS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES))
EXECUTABLE = $(BINDIR)/my_program
LIBRARY = $(LIBDIR)/libmylibrary.a
all: $(EXECUTABLE) $(LIBRARY)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) -o $@ $^
$(LIBRARY): $(OBJECTS)
ar rcs $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
$(CC) $(CFLAGS) -I$(INCDIR) -c -o $@ $<
clean:
rm -rf $(OBJDIR)/*.o $(EXECUTABLE) $(LIBRARY)
这个 Makefile 描述了一个包含多个源文件的项目,其中包括了默认目标
相关阅读
-
windows无法访问指定设备路径或文件 Windows无法访问指定设备路径或文件
小编为大家讲一讲windows无法访问指定设备路径或文件的教程内容。当我们在使用Windows系统电脑时,有可能会遇到“windows无法访问指定设备路径或文件”的问题,很多小白用户不知道该如何解
-
任务管理器快捷按键 任务管理器快捷键大全
今天小编介绍任务管理器快捷键大全的IT知识,关于任务管理器快捷按键 任务管理器快捷键大全,一起来看看吧! 如果我们电脑太过卡顿,或者画面卡主以后,我们通常都会启用任务管理器来
-
风林火山win7旗舰版系统在哪下载 风林火山ghost win7旗舰版
今天为大家介绍风林火山win7旗舰版系统在哪下载方面的知识,关于风林火山win7旗舰版系统在哪下载 风林火山ghost win7旗舰版,接下来IT袋小编就来介绍。 我们在使用win7操作系统的时候,有的情
-
win11办公软件位置介绍 windows11办公软件在哪
今日重点为您介绍win11办公软件位置介绍的内容,关于win11办公软件位置介绍 windows11办公软件在哪,请看下面详细的介绍。 不少的IT袋网友都想在win11系统中使用办公软件,但是又不知道win11的


