一般在Linux的环境中编译程序用的都是gcc,举个最简单的例子:gcc a.c,当执行该条命令时就会产生a.out的可执行文件。
但如果我们想改变gcc的行为,而不重新生成一个新的gcc,我们可以怎么做呢?是的,我们可以用命令将其进行包裹,比如:lltwrapper gcc。
其中,lltwrapper可以是一个脚本,也可以是一个二进制的可执行程序,其作用是用来改变gcc的行为,从而达到插桩或改变编译流程的目的。
如果直接在终端进行编译,那么很好解决,直接在gcc的前面加上相应的命令即可。可是现在的工程大多都是用cmake构建的,又该如何解决?
我尝试过用 export CC=lltwrapper /usr/bin/gcc
或 export CC="lltwrapper /usr/bin/gcc"
或 SET(CMAKE_C_COMPILER lltwrapper /usr/bin/gcc)
或 SET(CMAKE_C_COMPILER "lltwrapper /usr/bin/gcc")
进行解决,但都没有收到预期的效果:均会导致cmake报错。
正确的做法是使用 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE lltwrapper) 来设定gcc的编译前缀。
这样,cmake生成Makefile时就能够正确地将lltwrapper加在合适的位置,从而达到包裹gcc的目的。