Linux 当我们可以编写自己的makefile时,为什么要使用像Autotools这样的构建工具呢?
最近,我将我的开发环境从Windows切换到Linux。到目前为止,我只使用VisualStudio进行C++开发,所以很多概念,比如说,对我来说都是新概念。我已经阅读了GNU makefile文档,对它几乎有了概念。但我对自动工具有点困惑 据我所知,makefile用于简化构建过程Linux 当我们可以编写自己的makefile时,为什么要使用像Autotools这样的构建工具呢?,linux,gnu-make,autotools,Linux,Gnu Make,Autotools,最近,我将我的开发环境从Windows切换到Linux。到目前为止,我只使用VisualStudio进行C++开发,所以很多概念,比如说,对我来说都是新概念。我已经阅读了GNU makefile文档,对它几乎有了概念。但我对自动工具有点困惑 据我所知,makefile用于简化构建过程 为什么我们需要像Autotools这样的工具来创建makefiles呢?因为所有人都知道如何创建makefile,所以我没有真正使用Autotools 标准是什么?我们需要使用这样的工具吗?还是只需要手写makef
您知道您的用户将使用什么unix吗?甚至是Linux的哪个发行版?你知道他们想把软件安装在哪里吗?你知道他们有什么工具,他们想在什么架构上编译,他们有多少CPU,他们可以使用多少RAM和磁盘吗 *nix世界是一个跨平台的环境,您的构建和安装工具需要处理这个问题
请注意,auto*工具可以追溯到更早的时代,关于它们有很多合理的抱怨,但是用更现代的替代品替代它们的几个项目在发展动力方面遇到了困难
在*nix世界中,很多事情都是这样的。需要自动工具,因为不能保证makefile在不同平台上工作相同。如果你手写一个Makefile,并且它可以在你的机器上运行,那么它很有可能不会在我的机器上运行。对于小型项目,甚至对于只在一个平台上运行的大型项目,手写makefiles是一种好方法 当您为需要不同选项的不同平台进行编译时,autotools才真正发挥作用。自动工具通常是典型应用程序背后的大脑 /配置 制造 安装 Linux库和应用程序的编译和安装步骤
也就是说,我觉得自动工具很痛苦,我一直在寻找一个更好的系统。最近我一直在使用bjam,但这也有它的缺点。祝你好运,找到适合你的东西。你在这里谈论的是两件独立但相互交织的事情:
- 自动工具
- GNU编码标准
- 自动通信
- 汽车制造商
- 利布托
--使用foo
,--不使用foo
,--前缀
,--sysconfdir
,等等),以及进行检查以确保系统可以编译程序
Configure生成一个config.h
文件(来自模板),程序可以包含该文件来解决可移植性问题。例如,如果未定义HAVE_LIBPTHREAD
,请改用forks
我个人在许多项目上使用Autoconf。人们通常需要一些时间来适应。然而,它确实节省了时间
您可以让makefile继承一些配置查找的值,而不使用automake
汽车制造
通过提供一个简短的模板来描述将构建哪些程序以及构建这些程序需要链接哪些对象,可以自动创建符合GNU编码标准的Makefiles。这包括依赖处理和所有必需的GNU目标
有些人觉得这更容易。我更喜欢编写自己的makefile
Libtool
Libtool是一个非常酷的工具,用于简化任何类Unix系统上共享库的构建和安装。有时我用它;其他时候(尤其是在构建静态链接对象时)我是手工操作的
还有其他选择,请参见StackOverflow问题
构建自动化和GNU编码标准
简而言之,如果向大众发布代码,您真的应该使用某种可移植的构建配置系统。你用什么取决于你自己。众所周知,GNU软件几乎可以在任何东西上构建和运行。但是,您可能不需要遵守这样的标准(有时甚至非常迂腐)
如果有的话,我建议您在为POSIX系统编写软件时尝试一下Autoconf。仅仅因为自动工具生成了与GNU标准兼容的构建环境的一部分,并不意味着您必须遵循这些标准(很多人不这么做!):)还有很多其他选择
编辑
不要害怕m4:)总有问题。大量的例子,或者是临时支票。编写自己的或使用测试内容。Autoconf经常与其他功能混淆。它们是两个独立的东西。首先,自动工具不是一个不透明的构建系统,而是一个松散耦合的工具链,tinkertim已经指出了这一点。让我补充一下关于Autoconf和Automake的一些想法: Autoconf是一种配置系统,它根据功能检查创建配置脚本,该功能检查应适用于各种平台。在其存在的15年中,大量的系统知识进入了其宏观数据库。一方面,我认为后者是自动工具尚未被其他东西取代的主要原因。另一方面,当目标平台更加异构、Linux、、…,并且必须支持多种不同的处理器体系结构时,Autoconf过去更为重要。如果您只想支持最新的Linux发行版和与Intel兼容的处理器,我真的看不出这有什么意义 Automake是GNU Make的抽象层,充当