GNUMake点滴(3)
来源:互联网 发布:期货数据哪看 编辑:程序博客网 时间:2024/05/24 00:09
变量和宏
在make中有四种方式对变量赋值:
1. :=运算符,如MAKE_DEPEND := $(CC) -M
这种方式叫做“简单展开”,因为在读到makefile中的这一行时等号右边就立即被展开了,等号右边引用的所有变量(如例子中的CC)也会被立即展开。其行为与一般编程和脚本语言相同。当等号右边引用的变量(如例子中的CC)还没有被定义时,它被展开成空(nothing)而不是空格之类。
2. =运算符,如MAKE_DEPEND = $(CC) -M
MAKE_DEPEND = $(CC) -M
...
# Some time later
CC = gcc
只要在此之前没有引用过MAKE_DEPEND就没问题。
另外,不止是“迟滞展开”,事实上每次使用该变量,等号右边的内容都会被重新展开。
3. ?=运算符,如OUTPUT_DIR ?= $(PROJECT_DIR)/out
这种方式叫“条件展开”,只有当OUTPUT_DIR 还没有被定义过时才进行赋值,否则什么都不做。这种方式在处理环境变量是特别有用。4. +=运算符,如OUTPUT_DIR += $(PROJECT_DIR)/out
“追加”方式。 其主要目的是给“递归展开”的变量追加内容。因为简单变量可以用simple := $(simple) new stuff的方式来追加内容;而对于递归展开的变量,recursive = $(recursive) new stuff会导致循环引用。这种情况只能用+=运算符。宏由define和endef定义,如:
define create-jar
@echo Creating $@...
$(RM) $(TMP_JAR_DIR)
$(MKDIR) $(TMP_JAR_DIR)
$(CP) -r $^ $(TMP_JAR_DIR)
cd $(TMP_JAR_DIR) && $(JAR) $(JARFLAGS) $@ .
$(JAR) -ufm $@ $(MANIFEST)
$(RM) $(TMP_JAR_DIR)
endef
宏其实也是变量的一种,事实上在GNU Make的手册上,变量和宏是通用的。其区别在于,宏可以包含多行内容。
- GNUMake点滴(3)
- GNUMake点滴(2)
- GNUMake点滴(1)
- GNUMake点滴(4)
- GNUmake 初步介绍
- Windows 下安装Gnumake
- 四、GNUmake命令行参数
- 点滴3
- #25 $CURDIR incompatible with gnumake
- CVSNT配置点滴3
- j2me 点滴3
- 记录点滴3
- Qt 编程点滴3
- c++学习点滴3
- C++点滴(3)
- [置顶] android点滴3
- 一、GNUmake与Makefile的简介
- 点滴
- 关系传递闭包Warshall算法之思想的一种解说
- Linux的USB器件驱动多接口设备初探
- 第一次写简历
- JDK6的新特性之八:嵌入式数据库Derby
- Eclipse插件列表
- GNUMake点滴(3)
- 10大最佳技术应用网站(除年度最佳外,其余按首字拼音顺序排列)
- vs2005常用快捷键
- 创建一个ASP通用分页类
- Java布局管理器深入讨论
- 遇到的linux问题汇集
- PHP学习第五节----函数的高级运用
- 一条Update语句实现两列值的交换
- C++未眠夜----我学习C++的心路历程