【发布时间】:2016-09-03 13:33:54
【问题描述】:
我的问题与帖子非常相关 Defined macro not recognized
我编写了一个 CMakeLists 文件,以便能够为 OS X(主要是 Eclipse,但有时使用 Xcode)和 Windows(Visual Studio)构建我的项目。今天在为 Windows + MinGW 创建我的项目时出现了这个问题。我在windows中使用定义的_WIN32来启用一些功能,即
bool Normal::HasNaNs() const
{
#ifdef _WIN32
return _isnan(x) || _isnan(y) || _isnan(z);
#else
return isnan(x) || isnan(y) || isnan(z);
#endif
}
但是,使用 Eclipse+MinGW 组合,代码进入 ifdef 部分,而不是(我希望/认为应该是正确的)进入 else 部分。我认为 Visual 是唯一具有 _isnan() 功能的。
那么,什么是检查 Windows+VS、Windows+MinGW、OSX 的更可靠的方法呢?
【问题讨论】:
-
您的另一个问题是关于非标准扩展(
M_PI不是 C 的一部分)。isnan是 C++ 的一部分,但 C++11。如果您使用的是 CMake,那么这些预处理器定义是完全错误的方法。为什么不在 CMake 级别执行此操作? -
我的阅读量刚好够让我的 CMake 文件用于创建项目。我的项目发生了变化,出现了新的需求。您能否提供一个链接,让我可以阅读并了解如何在 CMake 级别实现这一目标?
-
你想知道但又不敢问的一切:Pre-defined Compiler Macros