免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1424 | 回复: 4

[其他] 一个Makefile的问题 [复制链接]

论坛徽章:
0
发表于 2012-10-26 10:29 |显示全部楼层
现有一个makefile大概如下:
TARGET := xxx
CFLAGS += ..................................
CFLAGS += -DBUILD_DATE=“\”$(shell date)\""
.PHONY: test1 test2 test3
all : $(TARGET)

test1:
        make -C dir/test1

test2:
        make -C dir/test2

test3:
        make -C dir/test3

$(TARGET) : test1 test2 test3

因为只想让 make test1 和make test2的时候 传入CFLAGS
make test3的时候不要传入CFLAGS, 怎么办
直接通过make -C dir/test1 CFLAGS="$(CFLAGS)",  会有问题,问题在BUILD_DATE那个有空格,make 通不过

论坛徽章:
0
发表于 2012-10-26 13:53 |显示全部楼层
没人回答吗? 还是我放错了地方?

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-03-13 15:26:06CU大牛徽章
日期:2013-03-13 15:26:47
发表于 2012-10-26 14:41 |显示全部楼层
为何不把问题描述一并贴上?

论坛徽章:
0
发表于 2012-10-26 18:02 |显示全部楼层
回复 3# kongrenxin
因为只想让 make test1 和make test2的时候 传入CFLAGS
make test3的时候不要传入CFLAGS, 怎么办, 这就是问题
如果export CFLAGS, 3个子makefile都会有CFLAGS
想让test3的makefile不受影响,且不能在test3的makefile里改, 因为是opensource的一个东西,test3

   

论坛徽章:
0
发表于 2012-10-27 04:35 |显示全部楼层

手上暂时没有环境实验.
所以, 只能略微地分析下.

这行代码是一个规则:
  1. make -C dir/test1 CFLAGS="$(CFLAGS)"
复制代码
是一个规则, 意味着, make会新起一个进程, 调用makefile中预定义的shell(maybe bash)来解析这个规则.
问题在于, "$(CFLAGS)"在送给shell解析前, make会先将$(CFLAGS)展开:
...... -DBUILD_DATE=“\"$(shell date)\"" -> $(shell xxx)再展开-> ...... -DBUILD_DATE=“\"xxx: xxx: xxx\""
那么传给shell整个规则是:
make -C dir/test1 CFLAGS=" ...... -DBUILD_DATE=“\"xxx: xxx: xxx\"" "
我首先就不敢保证" "\" xxx: xxx: xxx\"" " 有没有问题(多少个soft quote, 数数...)

所以我认为, 也许LZ可以试试
make -C dir/test1 CFLAGS=‘$(CFLAGS)’
即将最外层的soft quote改成hard quote.

当然. 上面的只是一个一般的分析. 我还不敢保证的是, make是不是一定会先将其$(CFLAGS)展开. 我手上没有环境. LZ可否试试, 如若可行请告知, 若有更好的解决办法亦请告知, 我学习下.

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP