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文件的路径还是无法被改变.

你可能感兴趣的:(linux,redhat,gcc,bash,Path,编译器)