理解Makefile中的变量引用与展开

需积分: 44 76 下载量 42 浏览量 更新于2024-08-10 收藏 2.1MB PDF 举报
"Makefile教程-变量的引用" 在Makefile编程中,变量的引用是一个关键概念。变量允许我们将常用的数据存储起来,以便在Makefile的多个地方重复使用,提高代码的可读性和维护性。本教程以"变量的引用"为主题,详细解释了在MapGIS10环境下Makefile中如何使用变量。 6.1 变量的引用 变量的引用通常有两种形式:`$(VARIABLE_NAME)`和`${VARIABLE_NAME}`。例如,如果你想引用名为`foo`的变量,可以写成`$(foo)`或`${foo}`。需要注意的是,由于美元符号`$`在Makefile中有特殊含义(用于引用变量),所以在命令或文件名中如果需要使用美元符号,必须写成`$$`,以避免混淆。变量的引用可以在Makefile的多个上下文中使用,包括目标、依赖、命令、指示符以及新的变量赋值。 以下是一个实例: ```makefile objects = program.o foo.o utils.o program : $(objects) cc -o program $(objects) $(objects) : defs.h ``` 在这个例子中,`objects`变量保存了所有`.o`文件的列表,当构建`program`时,Makefile会将`$(objects)`展开为其值,从而正确地编译和链接所有相关的目标文件。 变量的展开是一个严格的文本替换过程,这意味着变量值会被准确地替换到引用它的位置。比如: ```makefile foo = c prog.o : prog.$(foo) $(foo) $(foo) -$(foo) prog.$(foo) ``` 展开后变成: ```makefile prog.c : prog.c cc -c prog.c ``` 这个例子展示了变量展开的过程,类似于C语言中的宏展开,但请注意,直接这样编写Makefile并不推荐,因为可能会导致不必要的复杂性。 在某些情况下,如变量名只有一个字符时,可以简写为`$x`的形式引用,但这仅限于简单的变量和自动化变量。对于多字符的变量,必须使用括号`$()`或`${}`来确保正确引用,例如`$PATH`会被视为单个字符的变量,而不是整个字符串。 在学习Makefile时,理解变量的引用和展开机制至关重要,因为它们构成了Makefile动态处理任务的基础。通过合理使用变量,可以极大地简化Makefile的编写,使其更加灵活和易于维护。在实际编写Makefile时,应遵循良好的编程习惯,避免过度复杂的变量引用结构,以减少潜在的错误和困惑。