diff --git a/eval.go b/eval.go
index 040995a..acaf588 100644
--- a/eval.go
+++ b/eval.go
@@ -31,11 +31,11 @@
 	lineno   int
 }
 
-func newEvaluator() *Evaluator {
+func newEvaluator(vars map[string]string) *Evaluator {
 	return &Evaluator{
 		outVars: make(map[string]string),
 		refs:    make(map[string]bool),
-		vars:    make(map[string]string),
+		vars:    vars,
 		funcs: map[string]Func{
 			"wildcard": funcWildcard,
 			"shell":    funcShell,
@@ -153,12 +153,56 @@
 	}
 }
 
+func (ev *Evaluator) getVars() map[string]string {
+	vars := make(map[string]string)
+	for k, v := range ev.vars {
+		vars[k] = v
+	}
+	for k, v := range ev.outVars {
+		vars[k] = v
+	}
+	return vars
+}
+
+func (ev *Evaluator) evalInclude(ast *IncludeAST) {
+	ev.filename = ast.filename
+	ev.lineno = ast.lineno
+
+	// TODO: Handle glob
+	files := strings.Split(ev.evalExpr(ast.expr), " ")
+	for _, file := range files {
+		mk, err := ParseMakefile(file)
+		if err != nil {
+			if ast.op == "include" {
+				panic(err)
+			} else {
+				continue
+			}
+		}
+
+		er, err2 := Eval(mk, ev.getVars())
+		if err2 != nil {
+			panic(err2)
+		}
+
+		for k, v := range er.vars {
+			ev.outVars[k] = v
+		}
+		for _, r := range er.rules {
+			ev.outRules = append(ev.outRules, r)
+		}
+		for r, _ := range er.refs {
+			ev.refs[r] = true
+		}
+	}
+}
+
 func (ev *Evaluator) eval(ast AST) {
 	ast.eval(ev)
 }
 
-func Eval(mk Makefile) (er *EvalResult, err error) {
-	ev := newEvaluator()
+func Eval(mk Makefile, vars map[string]string) (er *EvalResult, err error) {
+	ev := newEvaluator(vars)
 	defer func() {
 		if r := recover(); r != nil {
 			err = fmt.Errorf("panic: %v", r)
