---
name: "Makefile::AST"
section: "3pm"
platform: "linux"
package: "libmakefile-parser-perl"
version: "0.215-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/Makefile::AST"
---

# Makefile::AST(3pm)

AST for (GNU) makefiles

## NAME

Makefile::AST - AST for (GNU) makefiles

## DESCRIPTION

The structure of this (GNU) makefile AST is designed based on GNU make's data base listing output produced by `"--print-data-base"`.

This AST library provides the following classes:

- Makefile::AST

  The primary class for ASTs. Provides interface for node adding and querying, such as `"add_implicit_rule"`, `"apply_implicit_rules"`, `"add_explicit_rule"`, `"apply_explicit_rules"`, `"add_var"`, `"add_auto_var"`, `"get_var"`, as well as lots of other utility functions, like method `"eval_var_value"` for computing the ultimate values of makefile variables, method `"enter_pad"` and `"leave_pad"` for local variable's scoping pad.

- Makefile::AST::Rule::Base

  This is the base class for the rule nodes in the AST. It has properties like `"normal_prereqs"`, `"order_prereqs"`, `"commands"`, and `"colon"`.

- Makefile::AST::Rule

  This class represents the de-sugared form of simple rules and implicite rules *after* application. It inherits from Makefile::AST::Rule::Base, and adds new properties `"target"` and `"other_targets"`.

- Makefile::AST::Rule::Implicit

  This class represents the implicit rule nodes in the AST. It inherits from Makefile::AST::Rule::Base, and adds new properties `"targets"`, `"match_anything"`, and `"is_terminal"`.

- Makefile::AST::StemMatch

  This class encapsulates the file pattern matching (file names containing `"%"`) and stem substitution algorithms.

- Makefile::AST::Variable

  It represents the makefile variable nodes in the AST, including `"name"`, `"value"`, `"flavor"`, and `"origin"`.

- Makefile::AST::Command

  Used to encapsulate information regarding makefile rule commands (e.g. command body, command modifiers `"@"`, `"-"`, `"+"`, and etc.) as a whole.

## LIMITATIONS AND TODO

Adding support for other flavors' makes into this AST library should make a huge amount of sense. The most interesting candiate is Microsoft's NMAKE.

## CODE REPOSITORY

For the very latest version of this script, check out the source from

http://github.com/agentzh/makefile-parser-pm \<http://github.com/agentzh/makefile-parser-pm\>.

There is anonymous access to all.

## AUTHOR

Zhang "agentzh" Yichun `"<agentzh@gmail.com>"`

## COPYRIGHT AND LICENSE

Copyright (c) 2007-2008 by Zhang "agentzh" Yichun (agentzh).

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

Makefile::AST::Evaluator, Makefile::Parser::GmakeDB, makesimple, pgmake-db, Makefile::DOM.
