2010-03-27 172 views

回答

60

通常,當運行配置腳本:

  • 查了一些關於機器 細節上的軟件將是安裝 。該腳本會檢查您的系統上的大量依賴關係 。 對於正確使用 的特定軟件,可能需要在您的 機器上存在大量 機器。如果系統上缺少任何主要需求,那麼配置腳本exit將不能繼續安裝,直到獲得所需的內容爲止。

  • 創建要在下一步中使用的Makefile

+3

從來不知道makefile是通過configure之前創建的:) – Mask 2010-03-27 14:20:12

+2

它還提供了一個接口來配置(恰當)編譯選項。 './configure --help'會(通常?)給出可用選項的列表。 – intuited 2010-03-27 14:38:30

+0

爲生成文件詳細投票 – jayatubi 2015-03-26 09:05:04

5

配置腳本從模板建立Makefile文件,在東西替代等,其中要安裝代碼,需要什麼樣的定義,所使用的(C,C++,Fortran語言,...)編譯器建立該計劃。從理論上講,它可以一步完成,除了有很多不同的配置可能會更容易分階段完成。 (例如,如果用可用的多核機器構建大型程序,則可能需要指定發生一定數量的並行編譯,這不是關於如何配置的問題。)

32

它運行通常會生成makefile和「configure.h」的腳本。

該腳本寫入了作爲宏語言的lanugage「m4」。頂級宏可以在autoconf.ac或(在舊系統中)autoconf.in中找到。這些擴展包含較低級別的宏,然後擴展爲實際測試,這些測試創建小程序或任務以檢查您擁有的系統類型。

例如AC_CHECK_HEADER([myheader.h],...)可能會產生微量的C程序,如:

#include "myheader.h" 
int main(int argc, char** argv) { 
    return 0; 
} 

如果程序編譯,檢查被認爲是 「合格」,否則 「失敗」。 。這種檢查的狀態通常會反映在config.h文件中。在路過檢查,你可能會發現config.h中,看起來像一條線:在一個失敗的試驗

#define HAVE_MYHEADER_H 1 

同時,它可能看起來像

#define HAVE_MYHEADER_H 0 

當配置與autoconf的工作AM_INIT_AUTOMAKE宏,如果包含測試結果的變量被導出,Makefile也可以引用測試結果。因此,如果需要的庫位於幾個不同的典型位置,或者使用標準工具(如tar,ar等)的「某些工作」語法不同,或者首選工具不可用,則Makefile將仍然能夠使用不同的庫位置,不同的工具語法或一組不同的工具正確構建項目。

因此,在處理Autotools項目(configure/make/make install)時,Makefile實際上並不包含構建項目所需的所有內容,它是從Makefile.in模板生成的,以便在鍵入「配置」。

+0

我注意到這些'configure'文件非常龐大,它們是手動編寫的嗎? – Mask 2010-03-28 03:43:33

+10

不,配置腳本是放置在configure.ac文件(或舊系統的configure.in)文件中的指令的擴展(也使用m4語言)。運行autoconf將從configure.ac生成配置腳本,但有時需要修補宏庫。當你需要這樣做時,運行aclocal,它會嘗試驗證所有的宏是否被正確定義(並可用於下一次autoconf執行)。 – 2010-03-29 04:51:25

+0

@Edwin Buck:優秀的答案! – Lazer 2010-05-19 19:34:45

相關問題