Automake

Last updated
Automake
Developer(s) GNU Project
Initial releaseMay 28, 1996;28 years ago (1996-05-28)
Stable release
1.17 [1]   OOjs UI icon edit-ltr-progressive.svg / 11 July 2024;5 months ago (11 July 2024)
Repository
Operating system Cross-platform
Type Programming tool
License GNU General Public License
Website www.gnu.org/software/automake/ OOjs UI icon edit-ltr-progressive.svg

GNU Automake is a software development tool to automate parts of the compilation process. It eases common compilation problems. For example, it points to needed dependencies.

Contents

It automatically generates one or more Makefile.in from files called Makefile.am. Each Makefile.am contains, among other things, useful variable definitions for the compiled software, such as compiler and linker flags, dependencies and their versions, etc. The generated "Makefile.in"s are portable and compliant with the Makefile conventions in the GNU Coding Standards, and may be used by configure scripts to generate a working Makefile. [2]

The Free Software Foundation maintains automake as one of the GNU programs, and as part of the GNU build system. It is used to build several GNU applications and libraries, such as GTK, [3] as well as non-GNU software such as XCircuit. [4]

Process

Flow diagram of autoconf and automake Autoconf-automake-process.svg
Flow diagram of autoconf and automake

Automake aims to allow the programmer to write a makefile in a higher-level language, rather than having to write the whole makefile manually. In simple cases, it suffices to give:

Automake also takes care of automatically generating the dependency information, [5] so that when a source file is modified, the next invocation of the make command will know which source files need to be recompiled. If the compiler allows it, Automake tries to make the dependency system dynamic: whenever a source file is compiled, that file's dependencies are updated by asking the compiler to regenerate the file's dependency list. In other words, dependency tracking is a side effect of the compilation process.

This attempts to avoid the problem with some static dependency systems, where the dependencies are detected only once when the programmer starts working on the project. [6]

Design

Automake is written in Perl and must be used with GNU Autoconf. [2] Automake contains the following commands:

aclocal, however, is a general-purpose program that can be useful to autoconf users. The GNU Compiler Collection (GCC), for example, uses aclocal even though its makefile is hand written.

Like Autoconf, Automake is not entirely backward compatible. For example, a project created with automake 1.13 will not necessarily work with automake 1.14. [7]

See also

Related Research Articles

An integrated development environment (IDE) is a software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, and a debugger. Some IDEs, such as IntelliJ IDEA, Eclipse and Lazarus contain the necessary compiler, interpreter or both; others, such as SharpDevelop and NetBeans, do not.

<span class="mw-page-title-main">Package manager</span> Software tools for handling software packages

A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner.

GNU Autoconf is a software development tool for generating a configure script that in turn generates files for building a codebase and for packaging or installing the resulting files. Autoconf is part of the GNU Build System – along with Automake, Libtool, Autoheader and other tools.

<span class="mw-page-title-main">GNU Autotools</span> Software build toolset from GNU

The GNU Autotools, also known as the GNU Build System, is a suite of build automation tools designed to support building source code and packaging the resulting binaries. It supports building a codebase for multiple target systems without customizing or modifying the code. It is available on many Linux distributions and Unix-like environments.

<span class="mw-page-title-main">GNU Libtool</span> Shared library creation tool from GNU

GNU Libtool is a software development tool, part of the GNU build system, consisting of a shell script created to address the software portability problem when compiling shared libraries from source code. It hides the differences between computing platforms for the commands which compile shared libraries. It provides a command-line interface that is identical across platforms and it executes the platform's native commands.

In software development, Make is a command-line interface software tool that performs actions ordered by configured dependencies as defined in a configuration file called a makefile. It is commonly used for build automation to build executable code from source code. But, not limited to building, Make can perform any operation available via the operating system shell.

<span class="mw-page-title-main">KDevelop</span> Integrated development environment

KDevelop is a free and open-source integrated development environment (IDE) for Unix-like computer operating systems and Windows. It provides editing, navigation and debugging features for several programming languages, and integration with build automation and version-control systems, using a plugin-based architecture.

<span class="mw-page-title-main">MinGW</span> Free and open-source software for developing applications in Microsoft Windows

MinGW, formerly mingw32, is a free and open source software development environment to create Microsoft Windows applications.

<span class="mw-page-title-main">SCons</span>

SCons is a software development tool that analyzes source code dependencies and operating system adaptation requirements from a software project description and generates final binary executables for installation on the target operating system platform. Its function is similar to the more popular GNU build system.

Maven is a build automation tool used primarily for Java projects. Maven can also be used to build and manage projects written in C#, Ruby, Scala, and other languages. The Maven project is hosted by The Apache Software Foundation, where it was formerly part of the Jakarta Project.

menuconfig Tool for compiling Linux source code

make menuconfig is one of five similar tools that can configure Linux source, a necessary early step needed to compile the source code. make menuconfig, with a menu-driven user interface, allows the user to choose the features of Linux that will be compiled. It is normally invoked using the command make menuconfig; menuconfig is a target in Linux Makefile.

<span class="mw-page-title-main">CMake</span> Cross-platform build tool for configuring platform-specific builds

CMake is a free, cross-platform, software development tool for building applications via compiler-independent instructions. It also can automate testing, packaging and installation. It runs on a variety of platforms and supports many programming languages.

CFLAGS and CXXFLAGS are either the name of environment variables or of Makefile variables that can be set to specify additional switches to be passed to a compiler in the process of building computer software. FFLAGS fulfills a similar role.

configure script GNU Build System script for generating build configuration files

As generated by the GNU Build System, a configure script is a Bash shell script that generates build configuration files for a codebase to facilitate cross-platform support. It generates files tailoring for the host system – the environment on which the codebase is built and run.

makedepend is a Unix tool used to generate dependencies of C source files. A Microsoft Windows version was made available in 2002 and last updated in 2007 on UnxUtils.

<span class="mw-page-title-main">GnuCOBOL</span> COBOL compiler

GnuCOBOL is a free implementation of the COBOL programming language that is part of the GNU project. GnuCOBOL translates the COBOL code into C and then compiles it using the native C compiler.

Scratchbox 2 is a cross-compilation toolkit designed to make embedded Linux application development easier. It also provides a full set of tools to integrate and cross-compile an entire Linux distribution.

<span class="mw-page-title-main">Buildroot</span> Tool for building Linux

Buildroot is a set of Makefiles and patches that simplifies and automates the process of building a complete and bootable Linux environment for an embedded system, while using cross-compilation to allow building for multiple target platforms on a single Linux-based development system. Buildroot can automatically build the required cross-compilation toolchain, create a root file system, compile a Linux kernel image, and generate a boot loader for the targeted embedded system, or it can perform any independent combination of these steps. For example, an already installed cross-compilation toolchain can be used independently, while Buildroot only creates the root file system.

<span class="mw-page-title-main">Meson (software)</span> Build automation system

Meson is a software tool for automating the building (compiling) of software. Meson adopts a convention over configuration approach, promoting standard development tools and practice instead of providing unlimited flexibility to the user. Meson is free and open-source software written in Python, under the Apache License 2.0.

References

  1. Jim Meyering (11 July 2024). "automake-1.17 released [stable]" . Retrieved 12 July 2024.
  2. 1 2 "GNU Automake". GNU . Free Software Foundation. 2021-10-01. Retrieved 2024-04-26.
  3. "Compiling the GTK+ libraries" . Retrieved 2024-04-26.
  4. "XCircuit Compile and Install" . Retrieved 2024-04-26.
  5. "Automake Manual -- Automatic Dependency Tracking". GNU.org. Retrieved 2024-04-26.
  6. "Automake History". GNU.org. Retrieved 2024-04-26.
  7. "Re: "make distclean" broken?". 2013-07-16. Retrieved 2024-04-26.

Sources