(Just in case some of the other great explanations didn't quite hit the spot)
The "make" program allows you to use, what are called automatic variables. For every rule that it executes the action for, it parses the shell statements specified in the action, and expands any of these automatic variables that it finds. The variables expand to values in the context of the particular rule being executed at that point.
So, in your case, the rule being executed is:
test: $(SRC)
In this rule, "test" is the target, and whatever $(SRC) expands to, are the dependencies. Now, as "make" parses the following shell statement specified in the action part of the rule,
gcc -o $@ $^ $(CFLAGS) $(LIBS)
it recognizes $@ and $^ as automatic variables. $@ is expanded to the target for the current rule, and $^ is expanded to the dependencies, which is "test" and expansion of $(SRC), respectively. It executes the shell statements after the variables have been expanded. You can see the final expanded version that is executed by watching the output of "make".
$(SRC) will, in turn, expand to the result of the "make" function "wildcard". Keep in mind that the syntax for a function call in "make" is $(function param ...), and is expanded to the result of the function call, in this case the list of files with ".c" as the suffix.