I don't know about how to activate printk()
- what did you search for with Google? Amongst other things, I found this which seems to imply the printk()
is almost always available (but you have to mark the messages with an appropriate level, and there is probably a control over which levels are displayed on the console).
The square brackets in a macro name are unorthodox - and therefore probably an extension specific to your system.
Reading between the lines, it is likely that you are talking about the Linux kernel and therefore GNU Make, but you'd help everyone if you stated such things.
The :=
notation is an immediate assignment to the variable. The RHS is evaluated when the line is read and processed, not when the macro is used as is normally the case. It means that if there are macros referenced on the RHS, subsequent changes to those macros will not affect the value of this macro. Consider:
CFLAGS = ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
CFLAGS := ${OFLAGS} ${IFLAGS} ${DFLAGS} ${WFLAGS}
The first variation notes that CFLAGS will be formed from the 4 named macros (well, actually, it simply copies the line ready for later expansion), but does not expand the values until it is used in (presumably) a C compilation command.
The second variation immediately looks for the values of the 4 macros at the time when the line is read and expands them out. Subsequent changes in the 4 referenced macros are not reflected in CFLAGS.
The +=
notation adds the RHS to the macro, rather than simply replacing it.