【发布时间】:2012-03-14 06:34:49
【问题描述】:
我在 Visual Studio 中工作,但我的项目适用于基于 POSIX 的环境(marmalade sdk)。在这个项目中,发布 build 使用 gcc for ARM 编译,但调试版本适用于 windows 并由 MS 编译器编译。此外,这个环境有自己的 STL 和其他标准库的实现。
其中许多 c++ 库都有这样的代码:
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
是否可以取消定义 _MSC_VER 宏? - 这样 C++ 库就会在这里检测到 POSIX 系统。
【问题讨论】:
-
_MSC_VER仅在使用 Visual Studio C++ 编译器编译时定义。如果您使用任何其他编译器,它将不会被定义。 -
是的,它使用 Visual Studio C++ 编译器进行编译,但环境不使用任何 Windows 库,如 Windows.h - 它没有。关于如何告诉编译器不是标准 Windows 环境的问题。
-
使用像
_WIN32这样的基于构建的定义可能会更好,_MSC_VER很可能无法取消定义,因为它是一个内置的编译器 -
_MSC_VER旨在显示使用了哪个编译器。它没有说明构建环境。所以你应该只使用不同的微距
标签: c++ visual-studio visual-c++ marmalade