在学习tinyos的过程中,我发现我对makefile一无所知。
有许多可选的编译时特性可以通过声明预处理器变量的方式使用。
要使用它们,您必须执行以下操作:
CFLAGS="-DPACKET_LINK"
这将启用某个功能。
和
CFLAGS="-DPACKET_LINK" "-DLOW_POWER"
支持两个功能。
有人能为我剖析这些线条并告诉我发生了什么吗?不是在tinyos方面,而是在makefile方面!
发布于 2008-09-17 07:07:37
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...
发布于 2008-09-17 07:05:55
在makefile中的某个地方,CFLAG将在编译行中使用,如下所示:
$(CC) $(CFLAGS) $(C_INCLUDES) $<
最终在执行中将被翻译为:
gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o
此定义将传递给在头文件中定义的源代码
发布于 2008-09-17 07:12:37
-D选项设置预处理器变量,因此在本例中,将编译指定的"#ifdef / #endif“块中的所有代码。
也就是说。
#ifdef PACKET_LINK
/* whatever code here */
#endif
CFLAGS是makefile中使用的一个变量,当调用编译器时,该变量将扩展为其内容。
例如。
gcc $(CFLAGS) source.c
https://stackoverflow.com/questions/80657
复制相似问题