我有一些问题需要决定如何辨别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包含文件中提取定义可能非常棘手......
你怎么看?这似乎是个好主意吗? 您对更好的组织有什么建议吗?答案 0 :(得分:2)
这个解决方案似乎很好(从gcc的头文件中提取定义确实很复杂,但你没有太多选择:你必须在某些时候提供宏,你可能不希望整个头部结束在Frama-C)。
我不是预处理专家,但我不确定您是否能够将my_libc/sys/wait.h
和$FRAMAC_SHARE/libc/sys/wait.h
同时包含在您建议的-cpp-extra-args
选项中:最终得到两个sys/wait.h
标题,cpp
将始终选择第一个标题。我看到两个解决方案:
#include <libc/sys/wait.h>
定义标题,并-cpp-extra-args=... -I$(frama-c -print-path)
,以避免混淆标题的相对路径。请注意,在这两种情况下,您必须为应用程序使用的所有标头提供文件,即使它们中的大多数只是重定向或相应Frama-C文件的副本。但我想你应该完成一些shell命令。