1

我在 Apache 源代码上运行 concolic 分析工具 crest ( http://code.google.com/p/crest/ )。该应用程序的用法是:

../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 语句。

[root@localhost 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

1 回答 1

0

这是一种解决方法,它通过耗尽当前目录下的所有可能目录来填充整个导出的变量:

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

如果路径名中有空格,它也需要注意

于 2013-10-08T18:46:39.550 回答