爲什麼有必要儘管在makefile中指定了所有內容?Linux中典型的./configure有什麼作用?
回答
通常,當運行配置腳本:
查了一些關於機器 細節上的軟件將是安裝 。該腳本會檢查您的系統上的大量依賴關係 。 對於正確使用 的特定軟件,可能需要在您的 機器上存在大量 機器。如果系統上缺少任何主要需求,那麼配置腳本
exit
將不能繼續安裝,直到獲得所需的內容爲止。創建要在下一步中使用的
Makefile
。
配置腳本從模板建立Makefile文件,在東西替代等,其中要安裝代碼,需要什麼樣的定義,所使用的(C,C++,Fortran語言,...)編譯器建立該計劃。從理論上講,它可以一步完成,除了有很多不同的配置可能會更容易分階段完成。 (例如,如果用可用的多核機器構建大型程序,則可能需要指定發生一定數量的並行編譯,這不是關於如何配置的問題。)
它運行通常會生成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模板生成的,以便在鍵入「配置」。
我注意到這些'configure'文件非常龐大,它們是手動編寫的嗎? – Mask 2010-03-28 03:43:33
不,配置腳本是放置在configure.ac文件(或舊系統的configure.in)文件中的指令的擴展(也使用m4語言)。運行autoconf將從configure.ac生成配置腳本,但有時需要修補宏庫。當你需要這樣做時,運行aclocal,它會嘗試驗證所有的宏是否被正確定義(並可用於下一次autoconf執行)。 – 2010-03-29 04:51:25
@Edwin Buck:優秀的答案! – Lazer 2010-05-19 19:34:45
- 1. 什麼是Linux中的「./configure」的各種選項/參數
- 2. Linux configure/make,--prefix?
- 3. 什麼是鋰的等同於CakePHP的Configure :: load()和Configure :: read()?
- 4. `git-buildpackage`不會調用./configure,爲什麼?
- 5. 對PUT使用典型的GET操作有沒有什麼壞處? (RESTfully)
- 6. TCP Keepalive的典型用法是什麼?
- 7. Linux/tar中獨立的' - '選項有什麼作用?
- 8. 使用./configure(php)--disable- [name]和--without- [name]之間有什麼區別?
- 9. ./configure服務有什麼用處(除了檢查依賴關係)
- 10. 使用字典作爲返回類型的元組有什麼優勢?
- 11. 這個別名在Red Hat Linux中有什麼作用?
- 12. 什麼是外國JMS提供商? Weblogic在JMS應用程序中的典型作用是什麼?
- 13. 爲什麼字典有.updateValue()?
- 14. 什麼是Zenoss ZenPack開發的典型工作流程?
- 15. 什麼是在Python中使用'_rsub__'方法的典型實例?
- 16. 有什麼區別? ./ ./*在Linux
- 17. 什麼是git用./autogen.sh和./configure生成的文件處理?
- 18. 字典打印出所有單詞的I型什麼
- 19. 有限狀態機的典型字母大小是什麼?
- 20. Linux中的UID是什麼?
- 21. linux中的GB是什麼?
- 22. 爲什麼Linux中沒有病毒?
- 23. 〜/和〜在linux中有什麼區別?
- 24. 使用引用類型的值作爲字典鍵必須做什麼?
- 25. 添加和[]在詞典操作中有什麼區別
- 26. 什麼樣的工作典型應用該類超支的由OpenCL的
- 27. Control.ResumeLayout中的bool有什麼作用?
- 28. jQuery中的clearQueue有什麼作用?
- 29. python中的def行有什麼作用
- 30. Vala中的「_」函數有什麼作用?
從來不知道makefile是通過configure之前創建的:) – Mask 2010-03-27 14:20:12
它還提供了一個接口來配置(恰當)編譯選項。 './configure --help'會(通常?)給出可用選項的列表。 – intuited 2010-03-27 14:38:30
爲生成文件詳細投票 – jayatubi 2015-03-26 09:05:04