misspelledsearch.com:

make greeting card

information page

If you cannot find the information you are searching for on this page, we suggest searching Google with the correct spelling "make greeting card":

Google

For other uses, see Make (disambiguation).
The correct title of this article is make. The initial letter is capitalized due to technical restrictions.

make is a utility that automates the process of converting files from one form to another, doing dependency tracking and invoking external programs to do additional work as needed. Its dependency tracking is very simple and centers on using the modification time of the input files. Most frequently it is used for compiling source code into object code, joining and then linking object code into executables or libraries. It uses files called "makefiles" to determine the dependency graph for a given output, and the build scripts which need to be passed to the shell to build them. The term "makefile" stems from their traditional file name of "makefile" or (later) "Makefile".

Contents

  • 1 Origin
  • 2 Modern versions
  • 3 Advantages and disadvantages
  • 4 Makefile structure
  • 5 Example makefile
  • 6 Similar tools
  • 7 External links

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 variant, 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.

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. Three variants of the traditional make utility 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 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. Where BSD make has a rich set of internal macros at parse time, GNU make typically encourages the use of an external macro package like m4.
  • NMAKE, the build tool from Visual C++.

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.

Advantages and disadvantages

Like most software which has been around for as long as make has, it has its share of fans and detractors. Many problems have surfaced with scaling make to work with modern, large software projects, some contend, but many also point out that for the common case, make works very well, and has very simple, but powerful, expressiveness. In any event, make is still used for building many complete operating systems, and modern replacements are not very different in their basic operation.

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, and instead leave that task to be automated by their 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.

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:

# Comments use the pound sign (aka hash)
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.

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.

Note that in the "clean" target, a minus prefixes the command, which tells make to ignore errors in running the command; make will normally exit if execution of a command fails at any point. In the case of a target to cleanup, typically called "clean", one wants to remove any files generated by the build process, without exiting if they don't exist. By tagging the clean target PHONY, we prevent make expecting a file to be produced by that target. Note that in this particular case, the minus prefixing the command is redundant in the common case, the -f or "force" flag to rm will prevent rm exiting due to files not existing. It may exit with an error on other, unintended errors which may be worth stopping the build for.

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

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:

  • ant, which is popular for Java development and uses an XML file format.
  • cook, a very powerful tool with a C like syntax.
  • dmake (distributed make), which is used in the build process for some Sun Microsystems software, including OpenOffice.org and Solaris.
  • jam, which is a generally enhanced, ground-up tool which is similar to make.
  • Apache Maven, which is very similar to ant.
  • mk - developed originally for Plan 9, said to have "improved upon make by removing all the vowels from the name", and introducing a completely new syntax that many consider to be easier to read and more powerful. It has been ported to Unix as part of plan9port.
  • MPW Make -- Developed for Mac OS Classic and loosely similar to but not compatible with Unix make; it was designed with somewhat more complicated dependency syntax to allow for resource files. Mac OS X comes with both GNU make and BSD make. Available as part of the Macintosh Programmer's Workshop as a free, unsupported download from Apple.
  • Module::Build, which is a Perl module for the building and installation of other Perl modules. It replaces the existing ExtUtils::MakeMaker module, which actually used make to do the building.
  • NAnt, a tool similar to ant for the .NET framework
  • Rake, a Ruby-based build tool.
  • SCons, which is based around the Python programming language, and integrates a broader set of features than make. It is based on a Perl build driver called Cons.

External links

  • The GNU make manual
  • FreeBSD make manual page
  • Compiling and Running C++ programs on Linux
  • Makefile Tutorial
  • GTK Hello World tutorial including HOWTO create Makefiles
  • Recursive Make Considered Harmful

This make greeting card index site has been developed to help wayward users find the information they are looking for, no matter how they are mistakenly spelled or mistyped. This site is designed to help users find make greeting card information for the following query variants:

make greeting make greeting car make greeting cad make greeting cal
make greeting cart make greeting cald make greeting carred make greeting ard
make greeting art make greeting ald make greeting arred make greeting cadr
make greeting crad make greeting acrd make greeting crd make card
make gritent card make gleiteng card make gliteng card make gleitent card
make greeing card make greetng card make greetig card make greiteng card
make griteng card make greitent card make gleding card make gletiegng card
make gleateigng card make greedint card make gleatiegng card make greeteignt card
make gredint card make greetiegnt card make greteignt card make gleedint card
make gretiegnt card make greateignt card make greediegng card make greatiegnt card
make gleeteignt card make greeteigng card make grediegng card make gleetiegnt card
make greetiegng card make greteigng card make gleediegng card make greeding card
make gretiegng card make greateigng card make greediegnt card make greding card
make greatiegng card make gleeteigng card make gleeding card make gleetiegng card
make gleteigng card make gleting card make gleetint card make gleatint card
make greating card make gletint card make greting card make greetint card
make greatint card make gretint card make gleeting card make gleating card
make greetn card make greedin card make gleeteign card make greetan card
make gleatin card make gredin card make gleteign card make gretan card
make gleiten card make gleedin card make gleateign card make greatan card
make gliten card make greetin card make gledin card make greetiegn card
make gleetan card make greeten card make gretin card make greediegn card
make gretiegn card make gletan card make greten card make greatin card
make grediegn card make greatiegn card make gleatan card make greaten card
make greiten card make gleediegn card make gleetiegn card make greeteign card
make gleeten card make griten card make geetin card make gletiegn card
make greteign card make gleten card make gleetin card make greein card
make gleatiegn card make greateign card make gleaten card make gletin card
make getiegnt card make geteigng card make geeting card make geetng card
make geatiegnt card make geateigng card make geting card make geetig card
make geeding card make geeteignt card make geating card make geding card
make geteignt card make geiteng card make geedint card make geateignt card
make giteng card make gedint card make geetiegng card make geetint card
make geediegng card make getiegng card make getint card make gediegng card
make geatiegng card make geatint card make geediegnt card make geetiegnt card
make geeteigng card make geeing card make gretimg card make gretlng card
make greetign card make greetnig card make greeitng card make greteing card
make gereting card make rgeeting card greeting card nake greeting card
ake greeting card maek greeting card mkae greeting card amke greeting card
mak greeting card mae greeting card mke greeting card

If you would like to add or correct the content of this site, or if you are interested in supporting the efforts of misspelledsearch.com by placing your product information on these make greeting card pages, please contact mistype@gmail.com for details.

This article is licensed under the GNU Free Documentation License. It uses material from the Wikipedia article "make".