2016-12-31 99 views
5

我想建立一個不同的構建系統庫,但在庫文件需要運行由autoconf生成的配置腳本後生成的config.h頭文件中禁用依賴跟蹤。如何配置腳本

這是我下面嘗試並生成所需要

autoreconf -ivf 
./configure --disable-dependency-tracking 

構建系統保證了圖書館gflags將被鏈接的config.h文件步驟的順序和頭將可在預處理時間。但configure腳本以下錯誤退出

​​

有一些方法我可以得到需要的庫文件(如GFLAGS)的列表,然後將參數傳遞給configure腳本,告訴它的假設,這個庫是否存在在系統上?我通過幫助輸出拍得既autoreconf./configure,卻不能算出這個。

對不起,長的解釋和解決問題。我對autoconf等很陌生

回答

5

您的問題的答案是:不,從autotools不可能獲得依賴關係列表。

爲什麼?

嘛,自動工具沒有跟蹤所有的依賴。 而是檢查系統上是否存在特定功能(例如給定的頭文件或給定的庫文件)。 現在,特定的頭文件可以來自各種來源,例如,取決於你的分佈foo.h報頭可以經由

  • libfoo-dev(Debian和衍生物)
  • foo-devel(Fedora的)
  • foo(上游)被安裝
  • ...

在你的具體情況,你的項目的維護者輸出一個很好的錯誤信息,告訴你按名稱安裝一個給定的包。

項目的維護者也選擇了致命錯誤中止如果給定的依賴關係是不可用的。 其原因很可能是,該項目根本就沒有這種依賴性工作,這是不可能的編譯程序沒有它。

你的項目可能在C++編寫的,因此需要一個C++ -compiler。 很明顯,在中幾乎沒有使用將一些標誌傳遞給./configure,所以它假定有一個C++編譯器可用如果實際上沒有。

有希望

然而,並非所有都是壞的。 你configure腳本可能會禁用某些功能(這似乎是默認硬需求)的能力。

只是檢查./configure --help,尋找標誌像

  • --enable-FOO
  • --disable-FOO
  • --with-BAR
  • --without-BAR

自動化?

有一點了解自動工具,是configure真的是一個程序(源代碼是configure.ac)寫一些晦澀難懂的編程語言(包括bashm4), 這意味着它幾乎可以有任何的行爲,並沒有實現「dependecy跟蹤」沒有單一的標準方式。

2

你想要做的事情不會像umläute所說的那樣工作。在另一方面,這取決於你試圖建立的包,你可以告訴./configure給定庫是有,即使事實並非如此。

如果腳本使用pkg-config來檢查庫的存在。例如,你可以使用FOO_CFLAGSFOO_LIBS覆蓋存在檢查,並告訴它「是這些包在那裏,你只是不知道怎麼找他們」,但這些都是非常封裝專用的,所以你可能需要提供更多的信息,如果這就是你要找的內容。