我一直在尝试为我的代码可以支持的每个架构创建一个文件夹。在此文件夹中包含要包含的平台特定文件。我把它们包括在内:
#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,所以我认为它已经在某处定义了。
答案 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
将显示所有预定义的宏。