2013-03-27 74 views
1

我有一個包含頭文件的C文件。該頭文件位於不同的位置,具體取決於構建計算機正在運行的Linux的分佈情況。有條件的Autotools包括

使用自動工具在不同位置檢測標題的最簡潔方法是什麼?

回答

3

使用標準的AC_CHECK_HEADERS宏。

它將爲標題創建正確的預處理器定義。

例如:

AC_CHECK_HEADERS([somepath/foo.h someotherpath/foo.h]) 

將創建預處理器HAVE_SOMEPATH_FOO_HHAVE_SOMEOTHERPATH_FOO_H這取決於所述報頭的被發現限定。或者如果兩個頭都找到了。使用這些宏來決定包含哪個頭。

+0

謝謝。漂亮和整潔。 :) – kobrien 2013-03-27 11:53:09

+1

不!項目的維護者(編寫configure.ac的人)不應該檢查不同的路徑!正確的用法只是'AC_CHECK_HEADERS([foo.h])',用戶正確設置'CPPFLAGS'或者設置工具鏈來查找標題。這對於項目維護者來說不是問題,而是對用戶來說。 – 2013-04-06 11:32:47

+0

考慮用戶在'/ tmp/foo/include'中安裝'foo.h'的用例:維護人員不能合理地將'/ tmp/foo/include/foo.h'放入configure.ac! – 2013-04-06 11:36:35

1

維護人員不擔心這些事情。任何合理構建的發行版都將被設置,以便預處理程序可以在系統上安裝它(而不是用戶的$ HOME或其他非標準位置)時找到頭文件。如果將標題安裝在非標準位置,則設置工具鏈以查找標題是特定於平臺的任務,最容易在Linux中通過設置CPPFLAGS完成。例如,用戶可能會遇到

./configure CPPFLAGS=-I/p/a/t/h 

(配置與舊版本的autoconf生成的腳本可能需要調用是CPPFLAGS=-I/p/a/t/h ./configure)或她可能會增加/p/a/t/hCPATH,或使用其他任何可用的方法來通知預處理哪裏尋找包含文件。作爲維護者,所有你需要做的是確保配置腳本檢查用戶已正確設置工具鏈,而你做到這一點,包括AC_CHECK_HEADERSconfigure.ac調用:

AC_CHECK_HEADERS([foo.h])