gcc选项之多, 我已知这个世界上只有另几个程序可以与之相提并论: pc-lint, imagemagick 命令行工具.
但是, 如果你想让它输出的警告信息中使用绝对路径名, 而不是仅仅文件名部分, 却发现它竟没有这么一个选项. 一番搜罗之后, 只看到一个mail list中有人提出相同需求, 自问自答看来gcc没有这个选项, 在info gcc中, 也没找到full path, absolute path相关的选项.
假设它的确没有吧. 我还是会需要这一功能. 原因很简单: 我在查看所有的make.log时希望在vim中直接用f即可打开文件, 稍加调校, 最好还能定位到出错的那一行, 如果只有文件名部分, 可就麻烦了, 一则, 文件名, 可能位于某个子目录, 更麻烦的情况, 我在项目中偏偏就碰到了, 不同子目录下使用同样的文件名, 项目一大, 这种做法很让人烦.
先观察现有的make过程, 用的是哪个命令行, 一般来说, 一个make过程, 只会使用统一的一个编译器程序名, 如cc或gcc
which cc
在我的RedHat Linux上, 它位于/usr/bin 下.
查看$PATH, 一般来说/bin 列在/usr/bin之前,
hash -r
让bash 忘掉它曾在/usr/bin下成功找到过cc这回事, 下次使用时从头找.
cat > /bin/cc <#!/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文件的路径还是无法被改变.
阅读(1717) | 评论(0) | 转发(0) |