LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: poleman

问一个makefile问题,再求pc-lint工具

[复制链接]
发表于 2004-7-22 13:45:09 | 显示全部楼层
这是因为$(warning)把后面内容当成普通字符,不解释反引号,我也没找到什么办法
要是能改成echo "current directory name is $(DIR)"的形式就好办了

pwd是生成/a/b/c/d, 然后basename得到d
 楼主| 发表于 2004-7-22 14:04:02 | 显示全部楼层
DEBUG_FILE         := /a/b/c/d/e.c
DEBUG_DIRNAME         := $(dir $(DEBUG_FILE))
DEBUG_FILENAME        := $(basename $(DEBUG_FILE))
$(warning $(DEBUG_FILE): directory is $(DEBUG_DIRNAME), file is: $(DEBUG_FILENAME) )
我的系统输出为:
Makefile:20: /a/b/c/d/e.c: directory is /a/b/c/d/, file is: /a/b/c/d/e

我特意写了echo 输出
@echo $(DEBUG_FILE): directory is $(DEBUG_DIRNAME), file is: $(DEBUG_FILENAME)
,结果为
/a/b/c/d/e.c: directory is /a/b/c/d/, file is: /a/b/c/d/e
 楼主| 发表于 2004-7-22 14:14:18 | 显示全部楼层
我测试后发现:
basename是去除文件扩展名,得到的是路径+文件名(去扩展名)
dir:是得到文件的目录部分
nodir:在我的系统上无效,根据一些资料介绍是可以得到去除路径信息的文件名的

这些好象都不能达到我的目的,因为a/b/c/d中d的属性仍然是目录部分

其实我的要求可以说成在字符串/a/b/c/d中找出最后的"/"后的字符串,这里是d,有没有办法呢?
发表于 2004-7-22 14:16:01 | 显示全部楼层
把你那一句改成
DEBUG_FILENAME := $(notdir $(DEBUG_FILE)) 就对了

你这个basename是make里的关键字,我写的basename是在shell执行的命令
含义不同
发表于 2004-7-22 14:18:49 | 显示全部楼层
噢,是不是你把notdir写成nodir了?
/a/b/c/d中的d是目录还是文件没关系,对make来说都是字符串
发表于 2004-7-22 14:32:05 | 显示全部楼层
$(warning current dir is: $(shell basename `pwd`))
这样也行
 楼主| 发表于 2004-7-23 11:16:22 | 显示全部楼层

谢谢fog_proxy,doubleelec的回复

根据你们的解答,问题已经解决了
basename确实需要用shell命令才能满足我的需要;
nodir是个错误,应该是notdir,我查阅的资料有误
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表