Makefile for interpreter in C My Makefile looks like this

opsh:   shellparser.c main.c util.c errors.c
    gcc -std=c99 -oopsh shellparser.c main.c util.c errors.c -lreadline -ltermcap

PREFIX = /usr/local

.PHONY: install
install: opsh
    mkdir -p $(DESTDIR)$(PREFIX)/bin
    cp $&lt; $(DESTDIR)$(PREFIX)/bin/opsh

.PHONY: uninstall
uninstall:
    rm -f $(DESTDIR)$(PREFIX)/bin/opsh


The project is available on github. The statistics are

$ cloc .
      30 text files.
      30 unique files.                              
      45 files ignored.

http://cloc.sourceforge.net v 1.60  T=0.08 s (283.8 files/s, 123084.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                6            837           2025           7105
C/C++ Header                     7             53             15            143
Bourne Shell                     7              6              6             93
yacc                             1              8              2             56
CMake                            1             12              0             28
make                             1              3              0             10
YAML                             1              1              0              5
-------------------------------------------------------------------------------
SUM:                            24            920           2048           7440
-------------------------------------------------------------------------------
You should investigate whether GNU Make (or whichever Make implementation your users are supposed to use) has a special variable for all dependencies of the current rule, so that you don't need to list the source files twice.
The command line for gcc is missing the -Wall -Wextra -O2 options to catch common mistakes and to make the program run faster.
If you want the Makefile to be portable to systems other than GNU Linux on x86_64, you should switch to GNU autoconf, but that's a lot of work. If your project is just a toy project, it's fine as it is.