在bash脚本中自动引用.h文件

时间:2013-03-23 14:04:08

标签: c bash unix

我正在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文件上运行时会导致问题。

我的问题是:

  • 是否有办法找到正确的.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/

1 个答案:

答案 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'`

如果路径名中有空格

,也需要注意
相关问题