最近,我将开发环境从Windows切换到Linux.到目前为止,我只使用VisualStudio进行C++开发,所以很多概念,比如makeAutotools,对我来说都是新的.我已经阅读了GNU makefile文档,几乎对它有了概念.但我对自动工具有点困惑.

据我所知,makefiles用于简化构建过程.

  1. 为什么我们需要像Autotools这样的工具来创建makefiles呢?因为大家都知道如何创建makefile,所以我没有真正使用Autotools.
  2. 标准是什么?我们需要使用这样的工具吗?还是只需要手写makefiles就可以了?

推荐答案

你在这里谈论的是两件独立但相互交织的事情:

  • 自动工具
  • GNU编码标准

在自动工具中,您有几个项目:

  • 自动确认
  • 汽车制造商
  • 利布托

让我们逐一看一看.

自动确认

自动确认可以轻松地扫描现有树以找到其依赖项,并创建一个配置脚本,该脚本将在几乎任何类型的shell下运行.配置脚本允许用户控制构建行为(即--with-foo--without-foo--prefix--sysconfdir等)以及进行判断以确保系统能够编译程序.

Configure生成一个config.h文件(来自模板),程序可以包含该文件来解决可移植性问题.例如,如果未定义HAVE_LIBPTHREAD,则使用Forking .

我个人在许多项目中使用自动功能.人们通常需要一些时间才能习惯m4.然而,它确实节省了时间.

您可以让makefiles继承一些配置查找的值,而无需使用automake.

汽车制造商

通过提供一个简短的模板来描述将构建哪些程序以及构建这些程序需要链接哪些对象,可以自动创建符合GNU编码标准的Makefiles.这包括依赖处理和所有必需的GNU目标.

有些人觉得这更容易.我更喜欢编写自己的makefile.

利布托

利布托是一个非常酷的工具,可以简化任何类Unix系统上共享库的构建和安装.有时我用它;其他时候(尤其是在构建静态链接对象时)我是手工操作的.

还有其他 Select ,见问题100.

Build automation & GNU编码标准

简而言之,如果你向大众发布你的代码,你真的应该使用some种可移植的构建配置系统.你用什么取决于你自己.众所周知,GNU软件几乎可以在任何东西上构建和运行.然而,你可能不需要遵守这样的标准(有时甚至非常迂腐).

如果有什么不同的话,我建议您在为POSIX系统编写软件时try 一下自动确认.仅仅因为自动工具生成了与GNU标准兼容的构建环境的一部分,并不意味着你必须遵循这些标准(很多人不这么做!):)还有很多其他 Select .

Edit

不要害怕m4:)总有自动确认 macro archive个.有很多例子,或者是顺便判断一下.编写自己的或使用测试的内容.自动确认经常与汽车制造商混淆.它们是两个不同的东西.

Linux相关问答推荐

Linux内核中维护进程无关寄存器失败

用户作用域在Linux内核密钥环(Golang)中是什么意思?

如何在 shell 脚本中自定义 SFTP 详细输出

使用文件名重新打开 linux 管道(仅从一侧)

Ubuntu 20 不支持 MAP_FIXED_NOREPLACE

将行转换为一条

在 Linux 下将 TCP 流量重定向到 UNIX 域套接字

如何像 Nautilus 那样从命令行挂载?

加密/解密在两个不同的 openssl 版本之间不能很好地工作

如何在第一个错误时停止 xargs?

在 Emacs 中匹配括号的命令是什么?

将标准输出作为命令行工具的文件名传递?

以 qsub 开头的 shell 脚本的参数

sed - 如何使用 sed 进行正则表达式组

如何使用 sed 通过灵活的键和值更改我的配置文件?

如何在 IE 中使用 Linux 进行测试

`os.symlink` 与 `ln -s`

编译 OpenGL 程序 GL/glew.h 缺失

Linux控制台中的模糊文件搜索

学习内核编程