我正在Apache源代码上运行一个concoic分析工具crest(http://code.google.com/p/crest/)。该应用程序的用法是:
../crestSVN/bin/crestc server/request.c
因此,对于存在的每个.c文件,都需要运行此命令。为了加快速度,我继续编写了一个小的bash脚本来遍历目录中的所有.c文件并在其上运行此命令。问题是许多.c文件都有他们引用的头文件。如果在目录中找不到头文件,则在尝试分析.c文件时,crest命令将崩溃。
为了解决这个问题,我为包含.h文件的各种文件夹写了一个小的语句“export C_INCLUDE PATH =”.....这个工作正常,Crest能够在大多数文件上运行良好。但是,有一些问题。我确信我忘记在我创建的“C_INCLUDE_PATH”语句中包含.h文件的一些目录。另外,我认为当不同的“include.h”文件位于不同的目录中时会出现问题。使用上面的过程,可能会引用错误的“include.h”文件,因此当crest尝试在.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/
答案 0 :(得分:0)
这是一种解决方法,通过耗尽当前目录下的所有可能目录来填充整个导出变量:
C=`find . -name "*.h" -print0 | xargs -0 -If | sed -e 's!\/[^\/]*\.h!:!g;' | uniq`
export C_INCLUDE_PATH=`echo $C | sed 's/: */:/g'`
如果路径名中有空格
,也需要注意