通常使用预定义的预处理器
__linux__
和 __apple__
进行条件编译,如下所示:
#if defined(__linux__)
inline void foo() {
// Linux-specific implementation
}
#endif
#if defined(__apple__)
inline void foo() {
// macOS-specific implementation
}
#endif
int main() {}
但是,如果我用
clang main.cpp
编译它,特别是在交叉编译的情况下,编译器如何知道应该预定义哪个预处理器? __linux__
还是__apple__
?
通常编译器知道它要编译到的平台,并且编译器清楚目标体系结构,它会自动将定义的宏提供给预处理器,就好像它们已作为命令行或命令行上的
-D
参数包含在内一样特殊的 definitions file 已插入源代码的开头(as if 正是意味着,您不在命令行中指定这些参数,但编译器的行为就像这些参数已在开始时指定)文件)
您通常可以选择允许编译器在预处理之前显示它添加到编译单元的整套自动宏定义。