Makefile引用外部变量

Makefile的变量是一个文本字符串,有点像c语言中的宏,我们需要记住很重要的一点,Makefile中的变量和函数的展开是在make读取Makefile文件的时候进行的。我们可以在使用make命令的时候给把外部变量作为参数传进去。现在假设有这样一个场景,用户需要从Makefile外部读取一个存在文件中的变量,然后根据这个变量来链接不同的lib库。我们应该如何做呢?文件内容如下:


```
CUSFLG=123;

```

下边是一种错误的做法:在Makefile语法中引用shell语法,通过shell命令从文件中解析出变量值,然后再把这个值赋值给Makefile变量。这个过程可能会在两个地方做,一个是在规则内,如


```
def:
    CID=`awk -f ";" '{print $$1}' ./cfg.tmp`


ifeq($(CID), 123)
LDFLAGS += -lgca
#endif
```

这里有个小细节,一个$表示的是Makefile变量,shell变量是两个$$,Makefile中一行shell命令就是一个进程,shell变量根本没法传到进程之外,所以这样做根本得不到正确结果,那么,我们把赋值过程放在规则之外呢?


```
CID=`awk -f ";" '{print $$1}' ./cfg.tmp`


ifeq($(CID), 123)
LDFLAGS += -lgca
#endif
```

这样执行的结果就是CID的值是字符串=`awk -f ";" '{print $$1}' ./cfg.tmp`,而不是123,Makefile的变量永远是一个字符串。那么就没办法完成这个任务了吗?NO,我这有一种办法,我们可以把这个cfg.tmp文件看作是一个Makfile文件,这样在Makfefile脚本中把它include进来,CUSFLG就变成了一个Makfile变量,它的值是字符串"123;",代码如下:


```
include cfg.tmp


ifeq($(CUSFLG), 123;)
LDFLAGS += -lgca
#endif
```


这个`;`是不是很讨厌,注意,这里还没办法用Makefile提供的函数去掉`;`号,想不要这个`;`号,那只能在cfg.tmp里去掉它了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值