gcc应用: 错误提示时显示绝对路径


http://blog.chinaunix.net/uid-53564-id-2099520.html



gcc选项之多, 我已知这个世界上只有另几个程序可以与之相提并论: pc-lint, imagemagick 命令行工具.


但是, 如果你想让它输出的警告信息中使用绝对路径名, 而不是仅仅文件名部分, 却发现它竟没有这么一个选项. 一番搜罗之后, 只看到一个mail list中有人提出相同需求, 自问自答看来gcc没有这个选项, 在info gcc中, 也没找到full path, absolute path相关的选项.

假设它的确没有吧. 我还是会需要这一功能. 原因很简单: 我在查看所有的make.log时希望在vim中直接用<C-W>f即可打开文件, 稍加调校, 最好还能定位到出错的那一行, 如果只有文件名部分, 可就麻烦了, 一则, 文件名, 可能位于某个子目录, 更麻烦的情况, 我在项目中偏偏就碰到了, 不同子目录下使用同样的文件名, 项目一大, 这种做法很让人烦.

先观察现有的make过程, 用的是哪个命令行, 一般来说, 一个make过程, 只会使用统一的一个编译器程序名, 如cc或gcc

which cc
在我的RedHat Linux上, 它位于/usr/bin 下.

查看$PATH, 一般来说/bin 列在/usr/bin之前,
hash -r
让bash 忘掉它曾在/usr/bin下成功找到过cc这回事, 下次使用时从头找.

cat > /bin/cc <<END
#!/bin/bash

#set -x
ARGS=
for i in "$@"; do
    if [[ "$i" =~ '^[^/]+\.c$' ]]; then
        full_fname=$(cd $(dirname "$i");pwd;)/$(basename "$i")
        ARGS="$ARGS  $full_fname"
    else
        ARGS="$ARGS $i"
    fi
done
eval /usr/bin/gcc $ARGS
END


chmod a+x /bin/cc

再执行make即可

要点在于, 把每个实际进行编译的命令中含有的.c文件名部分, 用它的绝对路径替换, gcc在输出警告/错误信息时, 使用命令行上"看到"的文件名, 手工把绝对路径给它, 它自然就原样输出.

缺点: gcc有时会输出存在于.h 文件中的警告信息, 而.h文件往往是以相对路径的形式#include的, 所以.h文件的路径还是无法被改变.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值