我正在尝试编译一个包含以下行的库:
#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
这样做的正确方法是什么?
答案 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