在make或gcc中预定义的i386宏?

时间:2012-01-13 20:49:03

标签: gcc makefile

我一直在尝试为我的代码可以支持的每个架构创建一个文件夹。在此文件夹中包含要包含的平台特定文件。我把它们包括在内:

#define STR(x) #x
#define ASSTR(x) STR(x)

#include ASSTR(ARCHITECTURE/sizes.h)

我在make中的编译行如下所示:

gcc -o $@ -c $< -DARCHITECTURE=i386

哪个有效,直到我将ARCHITECTURE定义为i386。当发生这种情况时,它会查找1 / sizes.h,所以我认为它已经在某处定义了。

1 个答案:

答案 0 :(得分:3)

我相信由cpp调用的C预处理器(gcc)定义i386(对于i386系统)。您可以找到它所定义的内容:

touch foo.h; cpp -dM foo.h; rm foo.h

cpp手册页位于-d下,其中包含字符M(所以,-dM):

  

而不是正常输出,为执行预处理器期间定义的所有宏生成 #define 指令列表,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有文件foo.h,那么命令

    touch foo.h; cpp -dM foo.h
     

将显示所有预定义的宏。