问题描述
make可以像bash一样调用很多命令,debug选项属于编译器(以gcc为例),所以这个问题更准确的描述应该是:如何给make工程中gcc传递-g
参数。
之所以还用上面的名字,是因为最初的诉求冲到脑子的就是上面的样子。
一个偷梁换柱的思路
首先我们给gcc弄个wrapper程序gcc_wrapper
,在这个wrapper的gcc中调用真实的gcc,并加一些构建参数。简单得可以弄成如下的bash脚本
#!/usr/bin/bash
#gcc_wrapper
gcc -g $@
现在梁准备好了,接下来是怎么去换的问题。
一般Makefile工程中的编译器compiler都是可配置的,要么configure的时候读取CC系统变量,要么在Makefile开头指定CC变量,这两种情况我们通过配置这两变量来修改编译器为我们的gcc_wrapper
。
也有可能有极端情况,作者将gcc写死到了make中编译命令(个人测试程序经常会这么写)。这种情况,可以首先将ln -s gcc_wrapper gcc
,建一个软链接,且gcc_wrapper
中的gcc用真实gcc的绝对路径。然后通过配置bash中PATH
变量,将gcc_wrapper
所在路径放在PATH前面,如此make的时候就会用到我们的gcc_wrapper
.
最后有一点需要注意:chmod a+x gcc_wrapper
.