makefile linux简单教程2

目录

变量(Variables)

定义变量

使用变量

预定义变量

自动推导规则(Automatic Rule)

示例

通配符(Wildcards)

示例

条件判断(Conditionals)

示例


变量(Variables)

在 Makefile 中,你可以定义变量来存储和管理常用的值和命令。变量可以用于简化规则的书写,并提高可维护性。

定义变量

变量可以通过使用等号(=)或冒号等号(:=)进行定义。例如:

CC = gcc
CFLAGS = -Wall -O2

在上面的示例中,CCCFLAGS 是两个定义的变量,分别存储了编译器的名称和编译选项。

使用变量

你可以在规则中使用变量。例如:

hello: main.o utils.o
    $(CC) $(CFLAGS) main.o utils.o -o hello

在上面的示例中,$(CC)$(CFLAGS) 分别表示编译器和编译选项。

预定义变量

Makefile 还提供了一些预定义的变量,可以直接使用:

  • CC:C 编译器的名称。
  • CFLAGS:C 编译选项。
  • LDFLAGS:链接选项。
  • LDLIBS:链接的库。

这些预定义变量可以简化 Makefile 的书写。

自动推导规则(Automatic Rule)

自动推导规则是一种便捷的方式,使 Makefile 可以根据文件后缀自动推导出生成目标文件的规则。

示例

SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)
TARGET = hello

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(TARGET)

在上面的示例中,SRCS 存储了源文件列表,OBJS 是根据源文件列表生成的目标文件列表。$(SRCS:.c=.o) 表示将 SRCS 中的所有 .c 后缀替换为 .o 后缀。最后,$(TARGET) 规则依赖于 $(OBJS),可以自动推导出生成目标的规则。

通配符(Wildcards)

Makefile 支持通配符,用于匹配文件名。

示例

SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))
TARGET = hello

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(TARGET)

在上面的示例中,SRCS 使用通配符 *.c 匹配当前目录下的所有 .c 文件,OBJS 使用 patsubst 函数将 SRCS 中的 .c 后缀替换为 .o 后缀。这样可以根据当前目录下的文件自动构建目标。

条件判断(Conditionals)

你可以在 Makefile 中使用条件判断来根据不同的情况执行不同的命令。

示例

ifeq ($(DEBUG),1)
    CFLAGS += -g
else
    CFLAGS += -O2
endif

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $(OBJS) -o $(TARGET)

在上面的示例中,如果在命令行中传递了 DEBUG=1 的参数,那么 CFLAGS 将添加 -g 调试选项;否则,将添加 -O2 优化选项。根据条件判断的结果,选择不同的编译选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值