为什么有必要尽管在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