There is also eproject: http://wiki.github.com/jrockway/eproject
This approach will provide the most functionality if you are willing to write some Lisp to do exactly what you want. Eproject handles managing the projects, you add the sugar over that. (Eproject comes with eproject-extras, which is useful and serves as an example of how to write your own utility functions.)
For your needs, a function like this would suffice:
(defun compile-my-c-project ()
(interactive)
(compile (format "gcc %s -o %s"
(reduce (lambda (a b) (format "%s %s" a b))
(eproject-list-project-files)) ;; perhaps filter here
(eproject-name)))
This will take all the "project files", and produce an executable named after the project's name (usually the containing directory, but you can change that in the .eproject file).
The "project files" can be declared in the project type definition, or via the .eproject file. See the wiki for examples.
(Note that we use the "compile" command here, so that C-x ` works for navigating to errors.)