免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2566 | 回复: 2
打印 上一主题 下一主题

复杂的makefile高人帮解释下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-14 09:04 |只看该作者 |倒序浏览
有一复杂的makefile整个文件较长部分代码如下,有些变量赋值没有写出来。我只了解简单的makefile,请高人帮解释下如下部分.
1.尤其是最后一段%.d: ...(grep ....)
2. ()括号作用是表示多个命令吗,一般分号分开不就行了吗,必须用逗号吗?
3. $?指所有比目标新的依赖目标但是为什么前面又加一个$
4. 我有时运行这个makefile括号中的代码直接显示在屏幕上,没有执行而是作为引用了,这是为什么,makefile写的有错误?
如能详细解释下具体用法最好。

SRC=.

MAKECMDGOAL ?= run

MAKECMDGOAL := $(MAKECMDGOAL:%=%$(EXE))
.....

%.d: $(SRC)/%.f
      ( grep "^[^c*].*AGG" $< >/dev/null 2>&1 ; \
        echo "AGG = $$?" ; \
        echo "$*$(EXE): $@ $(LIB)" ; \
        $(CPP) -M $(INCLUDE) -x c $< | sed 's/^.*:/$@:/' ) > $@

论坛徽章:
0
2 [报告]
发表于 2010-01-14 10:04 |只看该作者
# SRC 定义为. 也就是当期目录
SRC=.

#  MAKECMDGOAL 如果在前面的makefile有定义,则使用以前定义的值
#  如果没有定义,则定义为run
MAKECMDGOAL ?= run

# MAKECMDGOAL 定义为先前的MAKECMDGOAL$(EXE) 比如runexe
# $(XXX:yy=zz)表达法和$(patsubst) 函数是一样的意思,主要是为了和别的makefile兼容
# 才支持这样的表达法
MAKECMDGOAL := $(MAKECMDGOAL:%=%$(EXE))
.....

# 所有的.d文件,依赖于对应的 $(SRC)/目录下面的.f文件,此处也就是.
# 目录,也就是当前目录
# $在makefile 中表示变量函数的引用,当你需要用到$本身的时候,需要用$$来表示
# 在shell语法中,$?表示的是返回值,在makefile中用到的时候用$$?
# 其实这个我也不完全弄的清楚。
# ()也许是shell的语法?这个我也不知道。
%.d: $(SRC)/%.f
      ( grep "^[^c*].*AGG" $< >/dev/null 2>&1 ; \
        echo "AGG = $$?" ; \
        echo "$*$(EXE): $@ $(LIB)" ; \
        $(CPP) -M $(INCLUDE) -x c $< | sed 's/^.*:/$@:/' ) > $@

论坛徽章:
0
3 [报告]
发表于 2010-01-15 11:52 |只看该作者
谢谢楼上
括号的作用是什么谁再帮解释下
我有时运行这个makefile括号中的代码直接显示在屏幕上,没有执行而是作为引用了,这是为什么,makefile写的有错误?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP