2012-11-12 41 views
2

我有一些问题来决定如何告诉Frama-C ,其中包括文件使用。我通常添加选项:如何指定Frama-C包含文件的路径?

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

为了从Frama-C获得标准规格。 但我经常需要的东西并不在邮资-C库。

例如,我要分析的源文件的人使用它在<sys/wait.h>, 定义,但因为邮资-C拥有自己的frama-c/libc/sys/wait.h,不包括海湾合作委员会的文件的宏。 不幸的是,邮资-C没有定义宏,定义最终丢失。 当然,我不想更改源文件!

我想建立一个本地目录 与my_libc/sys/wait.h文件,其中将包括 邮资-C文件,在其中我可以复制缺什么从GCC文件 的。

我会再使用:

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

但我有点被我的解决方案,因为担心这可能是相当棘手的来自GCC提取定义包括文件...

你觉得呢?这看起来不错吗? 你有关于更好组织的建议吗?

回答

2

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

我没有预处理的专家,但我不知道,你就可以包括my_libc/sys/wait.h$FRAMAC_SHARE/libc/sys/wait.h-cpp-extra-args选项,您建议:你最终有两个sys/wait.h头和cpp始终会选择第一个。我看到两个解决方案:

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

注意,在这两种情况下,你必须由您的应用程序使用的所有头提供的文件,即使他们大多仅仅是重定向或相应邮资-C文件的副本。但我想你应该用几个shell命令来完成。

+0

非常感谢你。事实上,我不能用'-cpp-EXTRA-args'我给了,和你有关使用'的libc/SYS/wait.h'是伟大的想法既'SYS/wait.h'。我会试着看看我能否找到一种方法使其清洁,并让我知道如果我这样做。我想知道人们如何分析大型应用程序来管理这个... – Anne