【发布时间】:2013-03-29 17:30:38
【问题描述】:
我正在尝试寻找一种“干净的方式”来使用默认预处理器定义来确定应该根据平台和编译器编译我的代码的哪些部分。
我当前的测试设置涉及一台装有 Visual C++ 编译器的 Windows 机器和一台装有 g++ 编译器的 Debian。
目前我有这样的事情:
#if defined (__GNUG__)
#define ASMMath_EI __attribute__ ((__visibility__("default")))
#elif defined (WIN32)
#ifdef ASMMath_EXPORTS
#define ASMMath_EI __declspec(dllexport)
#else
#define ASMMath_EI __declspec(dllimport)
#endif
#endif
extern void ASMMath_EI AsmProblemOne();
它有效,但我认为可能而且必须有一些更好的定义我可以检查。或者也许有一些更理想的 CMake 方式? 有什么建议吗?
【问题讨论】:
-
请注意,在 Windows 上使用 GCC 编译时,__GNUG__ 也设置为 true。最好使用__linux__。
-
@Ionic 想通了。我不确定是否需要 *nix 或 g++ 的定义。
-
对不起,似乎是 *nix 特定的:gcc.gnu.org/wiki/Visibility
-
_MSC_VER是检测 MSVC 的好定义。
标签: c++ visual-c++ g++ c-preprocessor