Since the intermediaries are compiler specific, it really depends on
which compiler.
Certainly most tend to be able to give you the output after the
pre-processor, and IIRC the assembly code but not sure about the
others.
Usually you need a command line option; for example in gcc to get the
preprocessor output, I usually stick the following in my Makefiles:
%.pp: %.c
$(CC) $(CFLAGS) -E -c $(@:.pp=.c) > $@