在学习tinyos的过程中,我发现我对makefile完全无能为力.
有许多可选的编译时功能可以通过声明预处理器变量来使用.
要使用它们,您必须执行以下操作:
CFLAGS="-DPACKET_LINK"
这可以实现某个功能.
和
CFLAGS="-DPACKET_LINK" "-DLOW_POWER"
启用两个功能.
有人可以为我解剖这些行并告诉我发生了什么事吗?不是在tinyos方面,而是在makefile方面!
CFLAGS是一个最常用于向编译器添加参数的变量.在这种情况下,它定义宏.
所以这-DPACKET_LINK
相当于在项目中放置#define PACKET_LINK 1
所有.c和.h文件的顶部.最有可能的是,您的项目中有代码,可以查看这些宏是否已定义并根据具体情况执行操作:
#ifdef PACKET_LINK // This code will be ignored if PACKET_LINK is not defined do_packet_link_stuff(); #endif #ifdef LOW_POWER // This code will be ignored if LOW_POWER is not defined handle_powersaving_functions(); #endif
如果你在makefile中向下看,你应该看到它$(CFLAGS)
可能用作:
$(CC) $(CFLAGS) ...some-more-arguments...
在makefile中的某个地方,CFLAG将在编译行中使用,如下所示:
$(CC) $(CFLAGS) $(C_INCLUDES) $<
并最终在执行中将被翻译为:
gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o
此定义将传递给头文件中定义的源代码