找到一个大型工程所编译的源文件(跟踪工程编译的文件)

如果你现在or将来的工作会和一个巨大的工程相关,那么本文的方法值得一试。比如一个工程成百上千个文件夹,涉及的源文件也是数不胜数,并且更让人伤心的事情是这些文件中因为若干历史原因保留在那里,但压根就和编译需要的东西八竿子打不着。这个时候,你怎么知道当前的工程到底编译了哪些文件呢?毕竟我们要熟悉工程需要从源文件入手。

 

方法一:

曾经我这么干过:

改makefile,大型工程都是用这个东东,如果你还不知道这个东东,那应该好好补习补习功课了哦,呵呵

有些时候,为了编译结果的输出好看,在makefile中将编译语句的输出禁用掉了,即在编译命令前加@,如

上面的例子,在编译的.c的时候就不会输出正在编译的文件了,去掉前面的@即可让arm-linux-gcc在编译的时候显示正在编译的文件,输出大概类似这样的(内容是我杜撰的,请勿对号入座):

gcc -c -g -O2 -DYY -o /some/path/to/target/xxx.o /some/path/to/source/xxx.c

这样我们就可以知道编译的文件了。

 

并且 make -n >make.log 可以直接将这些过程记录到make.log中进行分析,真是太方便了。

 

 

不过,还是高兴得太早了,因为大型的工程里面到处都是 make -C /some/sub/director/

这样一来,要是人家在子目录里面makefile来一句这样的东东:

@$(CC) -c $(CFLAGS) -o $@ $<

在CC前面来了个@,那我们就可能少得到一些文件,呜呼,吐血而亡。

 

如果你是比较“勤快”的人,可以把所有的子目录的makefile看一遍,然后逐一修正。该工作量可能也是非常巨大的。

我比较“懒”,这个方法不想用,其实主要是工程太大,子目录层层叠叠,太多了,看完估计头发都白了几根,呵呵

 

方法二:

懒人的方法:

原理:既然所有的编译都是用同一个编译器(什么,居然还用了两个编译器,哈哈,那也没关系,继续看吧),那么我们能不能再编译器上动点手脚呢,答案是可以并且可行,只要一个脚本即可搞定,哈哈。这可是偶在车上灵机一动想出来的,不会有人已经想到了吧。不过郁闷的是今天晚上回来坐车坐错了,本来10分钟就可以到家的,结果用了40多分钟,不过正是这多浪费的时间,才想到这个的,真是福祸相依啊,晕,扯远了,回归正题,看下面的脚本文件

 

比如要对付前面提到的arm-linux-gcc编译器,那么脚本文件就使用上面列举的代码,并且该脚本文件要命名为arm-linux-gcc,然后将该脚本文件放在环境变量$PATH最前面的路径中去,什么,你没有权限?那就重新加一个,like this: export PATH=/directory/of/shell/script/arm-linux-gcc/:$PATH  

这里要注意看看工程里面makefile是否有重新设置环境变量顺序,目的只有一个:让我们的这个脚本的要先于系统真正的编译器执行 ,可以使用which arm-linux-gcc 来查看是否设置正确。

 

然后,然后就等着看结果吧,打开/home/mayer/gcc_build.log这个文件就可以看到我们想要的东东了。

当然,该脚本不会妨碍真正的编译过程,同理你也可以跟踪其他的一些文件。

 

 

以上方法基于linux平台,当然,用同样的原理也可在window上实现,不过windows上要劫持编译器,可以用镜像劫持执行一个批处理达到目的。

 

太晚了,还没测试的,不过应该是没有问题的,欢迎拍砖。

早上来测试发现脚本有点问题,已经修正,功能完全正常,哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值