2013-03-23 22 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'` 

它也需要照顧,如果你在路徑名稱中有空格