Makefile变量的引用与赋值

简介: Makefile变量的引用与赋值

Makefile变量的引用与赋值

在Makefile中,变量的引用和赋值是非常常见和重要的概念,它们使得Makefile更加灵活和可维护。下面是一些关于变量引用和赋值的代码示例,以便大家更好地理解它们的用法:

1. 变量赋值示例:

# 定义变量

CC = gcc

CFLAGS = -Wall -O2

 

# 使用变量

all:

   $(CC) $(CFLAGS) main.c -o my_program

 

在这个例子中,CC 和 CFLAGS 是两个变量,分别存储了编译器和编译选项。通过在Makefile中赋值这些变量,可以在整个Makefile中引用它们来执行编译操作。这使得在编译过程中更容易进行修改和维护,例如更改编译器或添加编译选项。

2. 变量引用示例:

# 定义变量

SRCS = main.c foo.c bar.c

OBJS = $(SRCS:.c=.o)

 

# 使用变量

all: $(OBJS)

   gcc $^ -o my_program

 

# 默认规则

%.o: %.c

   gcc -c $< -o $@

 

在这个例子中,SRCS 变量存储了所有的源文件,OBJS 变量使用了替换(substitution)功能,将所有的.c文件替换成了.o文件,用于构建目标文件列表。通过使用 $(OBJS),我们可以在 all 目标中引用它来构建最终的可执行文件。这种方式使得Makefile更加灵活,因为只需在一个地方定义源文件列表,即可自动生成目标文件列表。

3. 高级变量赋值和引用示例:

# 条件变量赋值

DEBUG ?= 0

ifeq ($(DEBUG), 1)

   CFLAGS += -g

endif

 

# 变量引用

LIBS = -lm

all: $(OBJS)

   gcc $^ $(LIBS) -o my_program

 

在这个例子中,DEBUG 变量是一个条件变量,它可以在命令行上进行覆盖赋值。如果没有指定,则默认为0。根据 DEBUG 变量的值,我们可以动态地向 CFLAGS 变量中添加 -g 选项以进行调试。另外,LIBS 变量存储了需要链接的库列表,通过将其引用添加到链接命令中,可以使得Makefile更加灵活地进行链接操作。

通过这些示例,可以看到变量的引用和赋值在Makefile中的重要性和灵活性。它们使得Makefile更易于维护和扩展,因为可以将常用的值存储在变量中,并在整个Makefile中重复使用。

相关文章
|
6月前
|
编译器 C++
CPP的常量引用
CPP的常量引用
51 0
|
存储 Shell 编译器
makefile 变量赋值方式
makefile 变量赋值方式
88 1
|
6月前
|
Python
在Python中,全局变量和局部变量是两种不同类型的变量
【5月更文挑战第10天】Python中的全局变量在函数外部定义,作用域覆盖整个程序,生命周期从开始到结束。局部变量仅限于函数内部,生命周期从调用到返回。在函数内修改全局变量需用`global`关键字声明,否则会创建局部变量。
46 3
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
30 1
makefile 变量的替换,嵌套引用,命令行变量
makefile 变量的替换,嵌套引用,命令行变量
100 1
|
6月前
|
编译器 C++
C++:编译器对被const修饰变量的处理行为(替换)
C++:编译器对被const修饰变量的处理行为(替换)
37 0
|
6月前
|
Shell
变量的定义和引用
变量的定义和引用。
74 0
|
存储 编译器 C语言
为什么C语言全局变量初始化元素必须是常量,而局部变量可以不是常量
为什么C语言全局变量初始化元素必须是常量,而局部变量可以不是常量
113 0
|
C++
C++的引用 拷贝赋值和引用赋值
C++的引用 拷贝赋值和引用赋值
284 0
|
Go Python
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
86 0
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)