文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>make中特定于某个目标的变量定义

make中特定于某个目标的变量定义

时间:2010-05-06  来源:slimzhao

CFLAGS=global value

all: CFLAGS=all-private
all: other
        @echo $(CFLAGS)

other:
        @echo $(CFLAGS)

.PHONY: all other


以上这段文件,
make all 时, 会显示 all-private 两次, 第一次因为other, 第二次是all自己.

而make other时, 会显示 global value一次, 因为不需要执行all 这个target.

make all再次显示同样的all-private可以看出, 第一行的
all: CFLAGS=all-private先于目标的执行. 而完成other这个子目录时, 上层的赋值仍然生效. 因为other是嵌套在all的任务内部.

改为:
CFLAGS=global value

all: CFLAGS=all-private
all: other
        @echo $(CFLAGS)

other:
        @echo $(CFLAGS)

other2:
        @echo $(CFLAGS)
.PHONY: all other other2

再make all other2
结果是:
all-private
all-private
global value

这说明, 对该变量的赋值并不象是一个全局变量的性质, 而是一个动态作用域.

语法要求:
all: CFLAGS=all-private
不能再跟其它内容, =号后面都视为赋值的内容
也不能跟一行<TAB>命令

可以有多行这样的内容, 效果以最后一行为准
all: CFLAGS=1
all: CFLAGS=2
all: CFLAGS=3
all:
     echo $(CFLAGS)
结果当然是3
可以用:=号

使用=时, 递归是不允许的:
all: CFLAGS=1
all: CFLAGS:=$(shell echo $(CFLAGS) $(CFLAGS))
all: CFLAGS:=$(shell echo $(CFLAGS) $(CFLAGS))
all:
        @echo $(CFLAGS)
错误是
test_make:5: *** Recursive variable `CFLAGS' references itself (eventually).  Stop.

使用上面的:=则可以

使用这一办法, 可以对一个makefile中管理的绝大多数文件使用相同的CFLAGS 变量, 而又能对个别特殊的指定特定的取值.
相关阅读 更多 +
排行榜 更多 +
我是班长去广告版下载

我是班长去广告版下载

模拟经营 下载
什么鸭小游戏安卓版下载

什么鸭小游戏安卓版下载

策略塔防 下载
极光影院官方最新版本2025下载

极光影院官方最新版本2025下载

趣味娱乐 下载