如何指定Frama-C包含文件的路径?

时间:2012-11-12 09:40:18

标签: frama-c

我有一些问题需要决定如何辨别Frama-C 其中包括要使用的文件。我通常会添加选项:

-cpp-extra-args="-I $(frama-c -print-path)/libc"

以获得Frama-C的标准规格。 但我经常需要Frama-C库中没有的东西。

例如,我要分析的源文件之一使用<sys/wait.h>中定义的宏, 但由于Frama-C有自己的frama-c/libc/sys/wait.h,因此不包含gcc文件。 不幸的是,Frama-C没有定义宏,并且最终缺少定义。 当然,我不想更改源文件!

我正在考虑构建一个本地目录 使用my_libc/sys/wait.h文件包含 Frama-C文件,我可以在其中复制缺少的内容 来自GCC文件。

然后我会用:

-cpp-extra-args="-I my_libc -I $(frama-c -print-path)/libc"

但我对我的解决方案有点担心,因为从GCC包含文件中提取定义可能非常棘手......

你怎么看?这似乎是个好主意吗? 您对更好的组织有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这个解决方案似乎很好(从gcc的头文件中提取定义确实很复杂,但你没有太多选择:你必须在某些时候提供宏,你可能不希望整个头部结束在Frama-C)。

我不是预处理专家,但我不确定您是否能够将my_libc/sys/wait.h$FRAMAC_SHARE/libc/sys/wait.h同时包含在您建议的-cpp-extra-args选项中:最终得到两个sys/wait.h标题,cpp将始终选择第一个标题。我看到两个解决方案:

  • 您定义了自己的标准标题(可能使用Frama-C的libc中的copy'n粘贴),并仅使用它们
  • 您使用#include <libc/sys/wait.h>定义标题,并-cpp-extra-args=... -I$(frama-c -print-path),以避免混淆标题的相对路径。

请注意,在这两种情况下,您必须为应用程序使用的所有标头提供文件,即使它们中的大多数只是重定向或相应Frama-C文件的副本。但我想你应该完成一些shell命令。