2013-03-23 42 views
1

我在Apache源代码上运行concolic分析工具波峰(http://code.google.com/p/crest/)。该应用程序的用法是:在bash脚本中自动引用.h文件

../crestSVN/bin/crestc server/request.c 

因此,对于存在的每个.c文件,这个命令需要运行。为了加快速度,我继续编写了一个小的bash脚本来遍历目录中的所有.c文件,并在其上运行该命令。问题是许多.c文件都有它们引用的头文件。如果在目录中找不到头文件,那么crest命令会在尝试分析.c文件时崩溃。

为了解决这个问题,我为包含.h文件的各种文件夹编写了一个小语句“export C_INCLUDE PATH =”.....这一直奏效,Crest能够在大多数文件上工作得很好。但是,有几个问题。我确信我忘记了在我创建的“C_INCLUDE_PATH”语句中包含.h文件的一些目录。另外,我相信当不同的“include.h”文件位于不同的目录中时会有问题。使用上述过程,可能会引用错误的“include.h”文件,从而导致crest尝试在.c文件上运行时出现问题。

我的问题是:

  • 是否有正确的.h文件中被发现并链接到我试图在更自动化的方式来引用 .c文件的方法吗?
  • 你有什么常规建议?

这是我使用的C_INCLUDE_PATH语句。

[[email protected] dan]# export C_INCLUDE_PATH=/home/dan/Downloads/httpd-2.2.14/modules/http:/home/dan/Downloads/httpd-2.2.14/include:/home/dan/Downloads/httpd-2.2.14/srclib/apr/include:/home/dan/Downloads/httpd-2.2.14/srclib/apr-util/include:/home/dan/Downloads/httpd-2.2.14/os/unix/:/home/dan/Downloads/httpd-2.2.14/server/mpm/worker/:/home/dan/Downloads/httpd-2.2.14/mpm/netware/:/home/dan/Downloads/httpd-2.2.14/srclib/pcre/:/home/dan/Downloads/httpd-2.2.14/srclib/apr/include/arch/netware/ 
+4

你应该可能会从配置脚本和makefile中获取包含路径。 – 2013-03-23 14:08:06

+0

你可以使用gcc的选项'-E'(或'-EP',如果crest不喜欢#line指令)创建预处理源文件。 – Armali 2013-08-28 06:02:43

回答

0

下面是由在目前的一个用尽所有可能的目录充满整个出口变量解决方法:

C=`find . -name "*.h" -print0 | xargs -0 -If | sed -e 's!\/[^\/]*\.h!:!g;' | uniq` 
export C_INCLUDE_PATH=`echo $C | sed 's/: */:/g'` 

它也需要照顾,如果你在路径名称中有空格