Makefile深入解析:目标变量与局部赋值

需积分: 50 401 下载量 12 浏览量 更新于2024-08-10 收藏 964KB PDF 举报
"《目标变量-算法引论:一种创造性方法》高清版,作者:陈皓,整理者:祝冬华,主要讲解了Makefile的相关知识,包括目标变量的使用和Makefile的基本结构与规则。" 在Makefile编程中,目标变量(Target-specific Variable)是一个重要的概念。它允许我们在特定的构建目标上设置局部变量,这些变量只在当前规则及其相关的连带规则中有效,不会影响全局变量的值。这样设计提高了Makefile的灵活性和可定制性。 目标变量的定义语法如下: ```makefile <target ...> : <variable-assignment> <target ...> : override <variable-assignment> ``` 其中,`<target ...>` 是你想要指定的目标文件,`<variable-assignment>` 可以是各种赋值表达式,例如 "="、":="、"+=" 或 "?="。`override` 关键字用于覆盖通过命令行或环境变量传递的同名变量。 例如,如果你想在构建`prog`目标时增加调试标志,你可以这样设置: ```makefile prog : CFLAGS = -g prog : prog.o foo.o bar.o $(CC) $(CFLAGS) prog.o foo.o bar.o prog.o : prog.c $(CC) $(CFLAGS) prog.c ``` 在这个例子中,`CFLAGS` 在构建`prog`及其依赖时被临时设置为 "-g",仅在构建`prog`的过程中有效,不影响其他规则中`CFLAGS`的值。 Makefile的基本结构包含显式规则、隐晦规则、变量定义、文件指示和注释等。显式规则指定了如何从依赖文件构建目标文件,而隐晦规则是预定义的一些通用规则。变量在Makefile中起着核心作用,它们可以存储命令、文件名或编译选项等,简化Makefile的编写。通过使用变量,我们能避免代码重复,并方便地更改整个构建过程的配置。 `make`工具会根据Makefile中的规则来决定哪些文件需要重新编译。它会自动推导源文件和目标文件之间的依赖关系,但也可以通过显式声明依赖性来精确控制构建流程。此外,Makefile支持使用通配符(*)来匹配一组文件,以及通过伪目标(如`.PHONY`)来指示那些不需要实际文件的目标。 书写命令时,可以使用显式命令显示执行过程,也可以通过错误处理和嵌套`make`调用来控制构建流程。变量的使用包括基础赋值、变量中的变量、追加值、覆盖原有值等功能,使得Makefile更加灵活。 条件判断和函数在Makefile中提供了更复杂的逻辑处理能力。条件判断可以基于不同的条件执行不同的命令或规则,而函数则可以对字符串和文件名进行操作,增强Makefile的处理能力。 理解和熟练运用目标变量是编写高效Makefile的关键之一,它使得构建过程可以根据不同目标进行定制,提高了软件构建的灵活性和可维护性。