make: Error Messages
1
1 Appendix B Errors Generated by Make
1 ***********************************
1
1 Here is a list of the more common errors you might see generated by
1 'make', and some information about what they mean and how to fix them.
1
1 Sometimes 'make' errors are not fatal, especially in the presence of
1 a '-' prefix on a recipe line, or the '-k' command line option. Errors
1 that are fatal are prefixed with the string '***'.
1
1 Error messages are all either prefixed with the name of the program
1 (usually 'make'), or, if the error is found in a makefile, the name of
1 the file and line number containing the problem.
1
1 In the table below, these common prefixes are left off.
1
1 '[FOO] Error NN'
1 '[FOO] SIGNAL DESCRIPTION'
1 These errors are not really 'make' errors at all. They mean that a
1 program that 'make' invoked as part of a recipe returned a non-0
1 error code ('Error NN'), which 'make' interprets as failure, or it
1 exited in some other abnormal fashion (with a signal of some type).
1 ⇒Errors in Recipes Errors.
1
1 If no '***' is attached to the message, then the sub-process failed
1 but the rule in the makefile was prefixed with the '-' special
1 character, so 'make' ignored the error.
1
1 'missing separator. Stop.'
1 'missing separator (did you mean TAB instead of 8 spaces?). Stop.'
1 This means that 'make' could not understand much of anything about
1 the makefile line it just read. GNU 'make' looks for various
1 separators (':', '=', recipe prefix characters, etc.) to indicate
1 what kind of line it's parsing. This message means it couldn't
1 find a valid one.
1
1 One of the most common reasons for this message is that you (or
1 perhaps your oh-so-helpful editor, as is the case with many
1 MS-Windows editors) have attempted to indent your recipe lines with
1 spaces instead of a tab character. In this case, 'make' will use
1 the second form of the error above. Remember that every line in
1 the recipe must begin with a tab character (unless you set
1 '.RECIPEPREFIX'; ⇒Special Variables). Eight spaces do not
1 count. ⇒Rule Syntax.
1
1 'recipe commences before first target. Stop.'
1 'missing rule before recipe. Stop.'
1 This means the first thing in the makefile seems to be part of a
1 recipe: it begins with a recipe prefix character and doesn't appear
1 to be a legal 'make' directive (such as a variable assignment).
1 Recipes must always be associated with a target.
1
1 The second form is generated if the line has a semicolon as the
1 first non-whitespace character; 'make' interprets this to mean you
11 left out the "target: prerequisite" section of a rule. ⇒Rule
Syntax.
1
1 'No rule to make target `XXX'.'
1 'No rule to make target `XXX', needed by `YYY'.'
1 This means that 'make' decided it needed to build a target, but
1 then couldn't find any instructions in the makefile on how to do
1 that, either explicit or implicit (including in the default rules
1 database).
1
1 If you want that file to be built, you will need to add a rule to
1 your makefile describing how that target can be built. Other
1 possible sources of this problem are typos in the makefile (if that
1 file name is wrong) or a corrupted source tree (if that file is not
1 supposed to be built, but rather only a prerequisite).
1
1 'No targets specified and no makefile found. Stop.'
1 'No targets. Stop.'
1 The former means that you didn't provide any targets to be built on
1 the command line, and 'make' couldn't find any makefiles to read
1 in. The latter means that some makefile was found, but it didn't
1 contain any default goal and none was given on the command line.
11 GNU 'make' has nothing to do in these situations. ⇒Arguments
to Specify the Makefile Makefile Arguments.
1
1 'Makefile `XXX' was not found.'
1 'Included makefile `XXX' was not found.'
1 A makefile specified on the command line (first form) or included
1 (second form) was not found.
1
1 'warning: overriding recipe for target `XXX''
1 'warning: ignoring old recipe for target `XXX''
1 GNU 'make' allows only one recipe to be specified per target
1 (except for double-colon rules). If you give a recipe for a target
1 which already has been defined to have one, this warning is issued
11 and the second recipe will overwrite the first. ⇒Multiple
Rules for One Target Multiple Rules.
1
1 'Circular XXX <- YYY dependency dropped.'
1 This means that 'make' detected a loop in the dependency graph:
1 after tracing the prerequisite YYY of target XXX, and its
1 prerequisites, etc., one of them depended on XXX again.
1
1 'Recursive variable `XXX' references itself (eventually). Stop.'
1 This means you've defined a normal (recursive) 'make' variable XXX
1 that, when it's expanded, will refer to itself (XXX). This is not
1 allowed; either use simply-expanded variables (':=' or '::=') or
11 use the append operator ('+='). ⇒How to Use Variables Using
Variables.
1
1 'Unterminated variable reference. Stop.'
1 This means you forgot to provide the proper closing parenthesis or
1 brace in your variable or function reference.
1
1 'insufficient arguments to function `XXX'. Stop.'
1 This means you haven't provided the requisite number of arguments
1 for this function. See the documentation of the function for a
11 description of its arguments. ⇒Functions for Transforming
Text Functions.
1
1 'missing target pattern. Stop.'
1 'multiple target patterns. Stop.'
1 'target pattern contains no `%'. Stop.'
1 'mixed implicit and static pattern rules. Stop.'
1 These are generated for malformed static pattern rules. The first
1 means there's no pattern in the target section of the rule; the
1 second means there are multiple patterns in the target section; the
1 third means the target doesn't contain a pattern character ('%');
1 and the fourth means that all three parts of the static pattern
1 rule contain pattern characters ('%')-only the first two parts
1 should. If you see these errors and you aren't trying to create a
1 static pattern rule, check the value of any variables in your
1 target and prerequisite lists to be sure they do not contain
1 colons. ⇒Syntax of Static Pattern Rules Static Usage.
1
1 'warning: -jN forced in submake: disabling jobserver mode.'
1 This warning and the next are generated if 'make' detects error
1 conditions related to parallel processing on systems where
11 sub-'make's can communicate (⇒Communicating Options to a
Sub-'make' Options/Recursion.). This warning is generated if a
1 recursive invocation of a 'make' process is forced to have '-jN' in
1 its argument list (where N is greater than one). This could
1 happen, for example, if you set the 'MAKE' environment variable to
1 'make -j2'. In this case, the sub-'make' doesn't communicate with
1 other 'make' processes and will simply pretend it has two jobs of
1 its own.
1
1 'warning: jobserver unavailable: using -j1. Add `+' to parent make rule.'
1 In order for 'make' processes to communicate, the parent will pass
1 information to the child. Since this could result in problems if
1 the child process isn't actually a 'make', the parent will only do
1 this if it thinks the child is a 'make'. The parent uses the
11 normal algorithms to determine this (⇒How the 'MAKE' Variable
Works MAKE Variable.). If the makefile is constructed such that
1 the parent doesn't know the child is a 'make' process, then the
1 child will receive only part of the information necessary. In this
1 case, the child will generate this warning message and proceed with
1 its build in a sequential manner.
1