FACTOID # 40: South America is unusual in that it is both highly urbanized and poor.
 
 Home   Encyclopedia   Statistics   Countries A-Z   Flags   Maps   Education   Forum   FAQ   About 
 
WHAT'S NEW
RELATED ARTICLES
People who viewed "Make" also viewed:
RECENT ARTICLES
More Recent Articles »
 

FACTS & STATISTICS    Simple view

  1. Select countries to view: (hold down Control key and click to select several)

     

     

    Compare:

     

     

  1. Select fact or statistic: (* = graphable)

     

     

     

  2. (OPTIONAL) Compare to statistic: (both need to be graphable)

     

     

     

  3. View result as:

     

       
(OR) SEARCH ALL encyclopedia, stats & forums:   

Encyclopedia > Make
The correct title of this article is make. The initial letter is shown capitalized because of technical restrictions.
Free software Portal

In computer programming, make is a utility for automatically building large applications. Files specifying instructions for make are called Makefiles. make is most commonly used in C/C++ projects, but in principle it can be used with almost any software project. Image File history File links Portal. ... Computer programming (often shortened to programming or coding) is the process of writing, testing, and maintaining the source code of computer programs. ... Utility software (also known as s0ftw4r3 utiliti3s, service program, service routine, tool, or utility routine) is a type of computer software that is designed to help manage and tune the computer hardware, operating system or application software and perform a single task or a small range of tasks; as opposed... Build Automation is the act of scripting or automating the process of turning computer source code into binary code. ... C is a general-purpose, block structured, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... C++ (pronounced see plus plus, IPA: ) is a general-purpose, high-level programming language with low-level facilities. ...


The basic tool for building an application from source code is the compiler. make is a separate, higher-level utility which tells the compiler which source code files to process. It tracks which ones have changed since the last time the project was built and it invokes the compiler on only the components that depend on those files. Although in principle one could always just write a simple shell script to recompile everything at every build, in large projects this would consume a prohibitive amount of time. Thus, a makefile can be seen as a kind of advanced shell script which tracks dependencies instead of following a fixed sequence of steps. Source code (commonly just source or code) is any series of statements written in some human-readable computer programming language. ... A diagram of the operation of a typical multi-language, multi-target compiler. ... A computer file is a collection of information that is stored in a computer system and can be identified by its full path name. ... A shell script is a script written for the shell, or command line interpreter, of an operating system. ... In computer science, coupling or dependency is the degree to which each program module relies on each other module. ...


Programmers increasingly rely on Integrated Development Environments and language-specific compiler features to manage the build process for them instead of manually specifying dependencies in makefiles. However, make remains widely used, especially in Unix-based platforms. This article or section does not cite any references or sources. ... Filiation of Unix and Unix-like systems Unix (officially trademarked as UNIX®) is a computer operating system originally developed in the 1960s and 1970s by a group of AT&T employees at Bell Labs including Ken Thompson, Dennis Ritchie and Douglas McIlroy. ...

Contents

Origin

There are now a number of dependency-tracking build utilities, but make is one of the most wide-spread, primarily due to its inclusion in Unix, starting with the PWB/UNIX 1.0, which featured a variety of tools targeting software development workloads. It was originally created by Stuart Feldman in 1977 at Bell Labs. In 2003 Dr. Feldman received the ACM Software System Award for the invention of this important tool. Filiation of Unix and Unix-like systems Unix (officially trademarked as UNIX®) is a computer operating system originally developed in the 1960s and 1970s by a group of AT&T employees at Bell Labs including Ken Thompson, Dennis Ritchie and Douglas McIlroy. ... PWB/UNIX (for Programmers Workbench) was an early version of the Unix operating system. ... Stuart Feldman is best known as the creator of the make computer software for UNIX systems. ... Bell Laboratories (also known as Bell Labs and formerly known as AT&T Bell Laboratories and Bell Telephone Laboratories) was the main research and development arm of the United States Bell System. ... The Association for Computing Machinery, or ACM, was founded in 1947 as the worlds first scientific and educational computing society. ...


Before make's introduction, the Unix build system would most likely consist of "make" and "install" shell scripts accompanying a program's source. Being able to combine the commands for the different targets into a single file, and being able to abstract out dependency tracking and archive handling, was an important step in the direction of modern build environments.


Modern versions

Make has gone through a number of rewrites, and a number of from-scratch variants which used the same file format and basic algorithmic principles, and also provided a number of their own non-standard enhancements, in the time that followed. Some of them are:

  • BSD make, which is derived from Adam de Boor's work on a version of make capable of building targets in parallel, and survives with varying degrees of modification in FreeBSD, NetBSD and OpenBSD. Most notably, it has conditionals and iterative loops which are applied at the parsing stage and may be used to conditionally, and programmatically, construct the makefile, including generation of targets at runtime.
  • GNU make, which is part of most GNU/Linux installations and is frequently used in conjunction with the GNU build system. Its departures from traditional make are most noticeable in pattern-matching in dependency graphs and build targets, as well as a number of functions which may be invoked to have the make utility do things like collect a list of all files in the current directory.
  • Microsoft nmake, commonly available on Windows. It is fairly basic in that it offers only a subset of the features of the two above makes. Note that there exists another, incompatible program also called nmake from AT&T for Unix.

POSIX includes standardization of the basic features and operation of the make utility, and is implemented with varying degrees of completeness in Unix-based versions of make. In general, simple makefiles may be used between various versions of make with reasonable success. Some versions of GNU make and BSD make will look first for files named "GNUmakefile" and "BSDmakefile" respectively, which allows one to put makefiles which use implementation-defined behaviour in separate locations. BSD redirects here; for other uses see BSD (disambiguation). ... Parallel computing is the simultaneous execution of the same task (split up and specially adapted) on multiple processors in order to obtain results faster. ... FreeBSD is a Unix-like free operating system descended from AT&T UNIX via the Berkeley Software Distribution (BSD) branch through the 386BSD and 4. ... NetBSD is a freely redistributable, open source version of the Unix-like BSD computer operating system. ... OpenBSD is a freely available Unix-like computer operating system descended from Berkeley Software Distribution (BSD), a Unix derivative developed at the University of California, Berkeley. ... GNU (pronounced ) is a computer operating system composed entirely of free software. ... Linux (IPA pronunciation: ) is a Unix-like computer operating system. ... The GNU build system is a suite of tools produced by the GNU project that assist in making packages portable to many UNIX-like systems. ... There are very few or no other articles that link to this one. ... Microsoft Corporation, (NASDAQ: MSFT, HKSE: 4338) is a multinational computer technology corporation with global annual revenue of US$44. ... AT&T Inc. ... POSIX or Portable Operating System Interface[1] is the collective name of a family of related standards specified by the IEEE to define the application programming interface (API) for software compatible with variants of the Unix operating system. ...


Advantages and disadvantages

In its basic form, Make requires the programmer to manually track all dependencies between files in the project. This process is error prone, since a forgotten or an extra dependency might not be immediately obvious, but instead surfaces as subtle bugs in the software. It is possible to create make files that generate some of these dependencies, but a more common solution is to use one of the available generators to make, e.g. Automake toolchain provided from the GNU Project. Automake is a programming tool that produces portable makefiles for use by the make program, used in compiling software. ... The GNU logo, drawn by Etienne Suvasa The GNU Project was announced in 1983 by Richard Stallman. ...


Another problem not well handled by make is the tailoring of a build process to a given platform. E.g, the compiler used on one platform might not accept the same options as the one used on another. This problem is typically handled by generating a platform specific build instructions, which then in turn processed by make. Common tools for this process are Autoconf and Cmake. In computing, a platform describes some sort of framework, either in hardware or software, which allows software to run. ... Flow diagram of autoconf and automake Autoconf is a tool for producing shell scripts that automatically configure software source code packages to adapt to many kinds of UNIX-like systems. ... CMake is an extensible, open-source system that manages the build process in an operating system and compiler independent manner. ...


The syntax used by Make includes the use of tab, a whitespace character. Many editors do not provide very clear visual clues to the presence of tabs rather than spaces, and tab characters are not represented uniformly across editors in any case, with size varying from as little as 2 spaces to 8 spaces. Thus, the syntax of make is often subject to criticism. Some projects, such as Apache Ant, have attempted to redo make with a better syntax, with mixed success. For programmers using makefile generators, this issue is likely unimportant. This article is about the use of the term Tab in computing. ... For information on the programming language, see Whitespace programming language. ... Apache Ant is a software tool for automating software build processes. ...


With the advent of modern Integrated Development Environments, especially on non-Unix platforms, many programmers do not manually manage dependency tracking, or even the listing of which files are part of a project. Instead, the task is automated by the integrated environment. Likewise, many modern programming languages have language-specific ways of listing dependencies which are more efficiently tracked through the use of language-specific build utilities. These approaches typically have the drawback that support for arbitrary build instructions are limited. This article or section does not cite any references or sources. ...


Make is considered to be a mainly declarative programming language [1] [2] [3] [4] [5], and these languages are sometimes considered more difficult for programmers used to imperative programming languages [6] [7] [8] A declarative programming language is a high-level language that describes a problem rather than defining a solution — it makes use of declarative programming. ... In computer science, imperative programming, as opposed to declarative programming, is a programming paradigm that describes computation in terms of a program state and statements that change the program state. ...


Makefile structure

A makefile consists of lines of text which define a file (or set of files) or a rule name as depending on a set of files. Output files are marked as depending on their source files, for example, and source files are marked as depending on files which they include internally. After each dependency is listed, a series of lines of tab-indented text may follow which define how to transform the input into the output, if the former has been modified more recently than the latter. In the case where such definitions are present, they are referred to as "build scripts" and are passed to the shell to generate the target file. The basic structure is: English An indentation can mean two things: To make notches in something or form deep recesses in a coastline for instance. ...

 # Comments use the hash symbol target: dependencies command 1 command 2 . . . command n 

A makefile also can contain definitions of variables and inclusion of other makefiles. Variables in makefiles may be overridden in the command line arguments passed to the make utility. This allows users to specify different behaviour for the build scripts and how to invoke programs, among other things. For example, the variable "CC" is frequently used in makefiles to refer to a C compiler, and the user may wish to provide an alternate compiler to use. A command line interface or CLI is a method of interacting with a computer by giving it lines of textual commands (that is, a sequence of characters) either from keyboard input or from a script. ... C is a general-purpose, block structured, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ...


Example makefile

Below is a very simple makefile that would compile a source called "helloworld.c" using cc, a C compiler. The PHONY tag is a technicality that tells make that a particular target name does not produce an actual file. The $@ and $< are two of the so-called automatic variables and stand for the target name and so-called "implicit" source, respectively. There are a number of other automatic variables.

 helloworld: helloworld.o cc -o $@ $< helloworld.o: helloworld.c cc -c -o $@ $< .PHONY: clean clean: rm -f helloworld helloworld.o 

Note that the eight spaces prefixing 'cc' and 'rm' must be turned into tabs for make to work.


Debugging Makefiles

The seminal work on debugging Makefiles is Chapter 12 of Managing Projects with GNU Make. A seminal work [semen = seed (from the Latin seminalis)] is a work from which other works come--it is an engendering work which is so important in its ideas or technique that other people take these up and create new works too. ...


Two approaches to Make debugging are:

  1. Tracing makefile execution using a command line argument to make
  2. Adding debug print statements to each build rule using 'echo' or using an interactive debugger

John Graham-Cumming has written a series of articles on GNU Make debugging including Makefile Debugging: Tracing Macro Values, An Interactive GNU Make Debugger, Dynamic Breakpoints in the GNU Make Debugger, Tracing Rule Execution in GNU Make and Printing the value of a Makefile variable. John Graham-Cumming John Graham-Cumming is a British programmer best known for the open source POPFile email filtering program, although he maintains a number of other open source and proprietary programs written primarily in Perl, C and C++. He was one of the founding speakers at the annual Spam...


There are two GNU Make Debugger open source projects: gmd and remake. There is a short video demonstration of remake and debugging Makefiles.


Similar tools

There are also many tools which are like make, but which are not compatible with its makefile format. A comprehensive list is available on the A-A-P website. Some of the most notable are listed at the article on build automation. Build Automation is the act of scripting or automating the process of turning computer source code into binary code. ...


See also

Mk is the build tool replacing make in Version 10 Unix, Plan 9 from Bell Labs, and Inferno. ... Apache Ant is a software tool for automating software build processes. ... Java (Indonesian, Javanese, and Sundanese: Jawa) is an island of Indonesia and the site of its capital city, Jakarta. ... The Extensible Markup Language (XML) is a general-purpose markup language. ... CMake is an extensible, open-source system that manages the build process in an operating system and compiler independent manner. ... Flow diagram of autoconf and automake GNU Automake is a programming tool that produces portable makefiles for use by the make program, used in compiling software. ... SCons is an open source software build tool. ... Python is a high-level programming language first released by Guido van Rossum in 1991. ... Software Carpentry was originally a project funded in 2000-01 by Los Alamos National Laboratory to create easy-to-use open source replacements for basic software engineering tools aimed at programmers working in computational science. ...

External links


  Results from FactBites:
 
Make - Wikipedia, the free encyclopedia (1332 words)
Make has gone through a number of rewrites, and a number of from-scratch variants which used the same file format and basic algorithmic principles, and also provided a number of their own non-standard enhancements, in the time that followed.
BSD make, which is derived from Adam de Boor's work on a version of make capable of building targets in parallel, and survives with varying degrees of modification in FreeBSD, NetBSD and OpenBSD.
Its notable departures from traditional make are most noticeable in pattern-matching in dependency graphs and build targets, as well as a number of functions which may be invoked to have the make utility do things like collect a list of all files in the current directory.
make (8267 words)
The make utility shall write all commands to be executed to standard output unless the -s option was specified, the command is prefixed with an at sign, or the special target.SILENT has either the current target as a prerequisite or has no prerequisites.
After make has ensured that all of the prerequisites of a target are up-to-date and if the target is out-of-date, the commands associated with the target entry shall be executed.
Because the syntax specified for the make utility is, by and large, a subset of the syntaxes accepted by almost all versions of make, it was decided that it would be counter-productive to change the name.
  More results at FactBites »


 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments
Please enter the 5-letter protection code

Want to know more?
Search encyclopedia, statistics and forums:

 


Lesson Plans | Student Area | Student FAQ | Reviews | Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms.