生成文件 CFLAGS
在学习TinyOS的过程中我发现我对makefile完全一无所知。
有许多可选的编译时功能可以通过声明预处理器变量来使用。
要使用它们,您必须执行以下操作:
CFLAGS="-DPACKET_LINK"
这会启用某些功能。
和
CFLAGS="-DPACKET_LINK" "-DLOW_POWER"
启用两项功能。
有人可以帮我剖析这些线条并告诉我发生了什么事吗? 不是在 TinyOS 方面,而是在 makefile 方面!
In the process of learning TinyOS I have discovered that I am totally clueless about makefiles.
There are many optional compile time features that can be used by way of declaring preprocessor variables.
To use them you have to do things like:
CFLAGS="-DPACKET_LINK"
this enables a certain feature.
and
CFLAGS="-DPACKET_LINK" "-DLOW_POWER"
enables two features.
Can someone dissect these lines for me and tell me whats going on? Not in terms of TinyOS, but in terms of makefiles!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
只是为了完整起见 - 如果您使用 Microsoft 的 nmake 实用程序,您可能实际上看不到 makefile 中使用的 $(CFLAGS) 宏,因为 nmake 对于编译 C/C++ 文件等有一些默认设置。 其中,以下内容是在 nmake 中预定义的(我不确定 GNU Make 是否做了类似的事情),因此您可能在 Windows 上的工作 makefile 中看不到它:
Just for completeness in this - if you're using Microsoft's nmake utility, you might not actually see the $(CFLAGS) macro used in the makefile because nmake has some defaults for things like compiling C/C++ files. Among others, the following are pre-defined in nmake (I'm not sure if GNU Make does anything like this), so you might not see it in a working makefile on Windows:
CFLAGS 是最常用于向编译器添加参数的变量。 在本例中,它定义了宏。
因此,
-DPACKET_LINK
相当于将#define PACKET_LINK 1
放在项目中所有 .c 和 .h 文件的顶部。 最有可能的是,您的项目中的代码会查找这些宏是否已定义,并根据这些宏执行某些操作:如果您进一步查看 makefile,您应该会看到可能使用了
$(CFLAGS)
喜欢:CFLAGS is a variable that is most commonly used to add arguments to the compiler. In this case, it define macros.
So the
-DPACKET_LINK
is the equivalent of putting#define PACKET_LINK 1
at the top of all .c and .h files in your project. Most likely, you have code inside your project that looks if these macros are defined and does something depending on that:If you look further down in your makefile, you should see that
$(CFLAGS)
is probably used like:在 makefile 中的某个位置,CFLAG 将在编译行中使用,如下所示:
$(CC) $(CFLAGS) $(C_INCLUDES) $<
最终在执行中将被转换为:
gcc -DPACKET_LINK -DLOW_POWER -c filename.c -o filename.o
这个定义将被传递到源代码,因为它是在头文件中定义的
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
-D 选项设置预处理器变量,因此在您的情况下,指定的“#ifdef / #endif”块中的所有代码都将被编译。
即
CFLAGS 是 makefile 中使用的一个变量,当调用编译器时,该变量将扩展为其内容。
例如
The -D option set pre-processor variables, so in your case, all code that is in the specified "#ifdef / #endif" blocks will be compiled.
I.e.
The CFLAGS is a variable used in the makefile which will be expanded to it's contents when the compiler is invoked.
E.g.
-D 至少代表define(在 gcc 中),它允许您在命令行而不是某个文件中进行#define。 常见的情况是 -DDEBUG 或 -DNDEBUG,它们分别激活或禁用调试代码。
-D stands for define (in gcc) at least, which lets you #define on the command line instead of a file somewhere. A common thing to see would be -DDEBUG or -DNDEBUG which respectively activate or disable debugging code.