首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >生成文件CFLAGS

生成文件CFLAGS
EN

Stack Overflow用户
提问于 2008-09-17 14:58:40
回答 4查看 92.1K关注 0票数 22

在学习tinyos的过程中,我发现我对makefile一无所知。

有许多可选的编译时特性可以通过声明预处理器变量的方式使用。

要使用它们,您必须执行以下操作:

CFLAGS="-DPACKET_LINK"这将启用某个功能。

CFLAGS="-DPACKET_LINK" "-DLOW_POWER"支持两个功能。

有人能为我剖析这些线条并告诉我发生了什么吗?不是在tinyos方面,而是在makefile方面!

EN

回答 4

Stack Overflow用户

发布于 2008-09-17 07:07:37

CFLAGS是最常用于向编译器添加参数的变量。在本例中,它定义了宏。

因此,-DPACKET_LINK等同于将#define PACKET_LINK 1放在项目中所有.c和.h文件的顶部。最有可能的是,您的项目中有代码来查看是否定义了这些宏,并根据这些宏执行某些操作:

代码语言:javascript
复制
#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)的用法可能如下所示:

代码语言:javascript
复制
$(CC) $(CFLAGS) ...some-more-arguments...
票数 27
EN

Stack Overflow用户

发布于 2008-09-17 07:05:55

在makefile中的某个地方,CFLAG将在编译行中使用,如下所示:

$(CC) $(CFLAGS) $(C_INCLUDES) $<

最终在执行中将被翻译为:

gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o

此定义将传递给在头文件中定义的源代码

票数 8
EN

Stack Overflow用户

发布于 2008-09-17 07:12:37

-D选项设置预处理器变量,因此在本例中,将编译指定的"#ifdef / #endif“块中的所有代码。

也就是说。

代码语言:javascript
复制
#ifdef PACKET_LINK
/* whatever code here */
#endif

CFLAGS是makefile中使用的一个变量,当调用编译器时,该变量将扩展为其内容。

例如。

代码语言:javascript
复制
gcc $(CFLAGS) source.c
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/80657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档