<p>In the process of learning <a href="https://en.wikipedia.org/wiki/TinyOS" rel="nofollow noreferrer">TinyOS</a> I have discovered that I am totally clueless about makefiles.</p>
<p>There are many optional compile time features that can be used by way of declaring preprocessor variables.</p>
<p>To use them you have to do things like:</p>
<p><code>CFLAGS=&quot;-DPACKET_LINK&quot;</code>        this enables a certain feature.</p>
<p>and</p>
<p><code>CFLAGS=&quot;-DPACKET_LINK&quot; &quot;-DLOW_POWER&quot;</code> enables two features.</p>
<p>Can someone dissect these lines for me and tell me whats going on? Not in terms of TinyOS, but in terms of makefiles!</p>

Somewhere in the makefile the CFLAG will be used in compilation line like this:
```
$(CC) $(CFLAGS) $(C_INCLUDES) $<
```
and eventually in the execution will be translated to :
```
gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o
```
This define will be passed to the source code as it was define in the header file