What does a makefile rule syntax of the form "A : B : C" mean?

I’m looking through the CyanogenMod code to try to get a device running the latest version. In the build/core/binary.mk Makefile, there is a rule that looks like this:

$(gen_c_objects): $(intermediates)/%.o: $(intermediates)/%.c $(yacc_cpps) $(proto_generated_headers) 
$(LOCAL_ADDITIONAL_DEPENDENCIES) 
| $(my_compiler_dependencies)
    $(transform-$(PRIVATE_HOST)c-to-o)

Although I’m pretty new to Makefiles, I’ve never seen a rule of the form A: B: C. I thought it initially meant that C is the prerequisites list (both normal and order-only prereqs) for targets B, and the targets of B are the prerequisites for A, but I realized this couldn’t be the case since (I don’t think) Make does not have some implicit rules for generating .o files from other .o files.

What does this syntax mean?


Source: c#

Leave a Reply