我已经知道GCC的参数-finstrument-functions
可以钩住函数,而参数-finstrument-functions-exclude-file(functions)-list
可以排除某些要跟踪的文件/函数。
但是现在我有很多文件要编译,只有其中一些需要跟踪。我想知道是否可以包括一些要跟踪的特定功能/文件,例如-finstrument-functions-include-file(functions)-list
?
非常感谢!
答案 0 :(得分:1)
如果使用cmake构建项目,则可以从特定级别添加COMPILE_OPTIONS来受益。使用
add_compile_options()
用于目录范围的设置
target_compile_options()
针对特定于目标的设置和
set_source_files_properties()
用于文件特定设置。
以您的情况
set_source_files_properties(
myfile1.cc PROPERTIES COMPILE_FLAGS -finstrument-functions)
答案 1 :(得分:0)
GCC不支持这种现成的方式(这是构建系统的一项任务)。实现您想要的目标的一种常见方法是编写一个外壳包装程序,以替换GCC并在需要的地方添加标志:
$ cat path/to/fake/gcc
#!/bin/sh
FLAGS=
if echo "$*" | grep -q 'myfile1.c'; then
FLAGS=-finstrument-functions
fi
exec /usr/bin/gcc "$@" $FLAGS
$ export PATH="path/to/fake:$PATH"
答案 2 :(得分:0)
GCC可以扩展最近的GCC plugins编译器。
但是现在我有很多文件要编译,只有其中一些需要跟踪。
您应该考虑编写自己的GCC插件来完成这项工作。另请参见this draft报告。
您可以配置build automation工具(例如GNU make或ninja)来帮助您。
最后,可以生成一些C代码(例如#include
版的文件)。考虑一下元编程方法(例如使用SWIG或ANTLR或Bison或GPP或您自己的C代码生成器),也许使用X-macros。>