gcc:-Dvar =值无法按预期工作

时间:2015-04-21 15:47:56

标签: gcc

我正在尝试编译一个包含以下行的库:

#if AE_OS==AE_WINDOWS
#include windows.h
//stuff
#elif AE_OS==AE_POSIX
//other stuff
#endif

当我使用cpp -DAE_OS=AE_POSIX时,我得到了

cpp/src/ap.cpp:63:21: fatal error: windows.h: No such file or directory
 #include <windows.h>
                     ^

-D不起作用后添加空格,也不会将AE_OS=AE_POSIX放入单引号或双引号中,仅将AE_POSIX放入单引号或双引号中,并尝试所有这些组合带引号逃脱。
AE_POSIX放在转义单引号中至少会有所不同,但显然仍然不正确:

cpp/src/ap.cpp:59:5: warning: character constant too long for its type [enabled by default]
 #if AE_OS==AE_WINDOWS
     ^

我也尝试-D"AE_OS AE_POSIX"认为与#define "AE_OS AE_POSIX"相同,但显然忽略了引号,因为它将AE_OS定义为1:

<command-line>:0:16: error: missing binary operator before token "1"
cpp/src/ap.cpp:65:7: note: in expansion of macro ‘AE_OS’
 #elif AE_OS==AE_POSIX

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

预处理器理解整数类型的表达式,而不是字符串。

AE_POSIX和AE_WINDOWS are defined为不同的整数:

/*
 * definitions
 */
#define AE_UNKNOWN 0
#define AE_MSVC 1
#define AE_GNUC 2
#define AE_SUNC 3
#define AE_INTEL 1
#define AE_SPARC 2
#define AE_WINDOWS 1
#define AE_POSIX 2

所以对于POSIX来说:

cpp -DAE_OS=2