132 lines
4.5 KiB
C
132 lines
4.5 KiB
C
#ifndef INCLUDED_C_PLATFORM_H
|
|||
|
|
#define INCLUDED_C_PLATFORM_H
|
||
|
|
|
||
|
|
/* ==============================================================================
|
||
|
|
* 🎯 1. 编译器类型常量(严格以 C_ 开头)
|
||
|
|
* ============================================================================== */
|
||
|
|
#define C_COMPILER_TYPE_UNKNOWN 0
|
||
|
|
#define C_COMPILER_TYPE_GCC 1
|
||
|
|
#define C_COMPILER_TYPE_CLANG 2
|
||
|
|
#define C_COMPILER_TYPE_MSVC 3
|
||
|
|
|
||
|
|
/* 初始化默认值 */
|
||
|
|
#define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_UNKNOWN
|
||
|
|
#define C_CURRENT_COMPILER_NAME "Unknown Compiler"
|
||
|
|
#define C_CURRENT_COMPILER_VERSION 0
|
||
|
|
|
||
|
|
/* 核心阻断:Clang 具有欺骗性(会同时定义 __GNUC__ 或 _MSC_VER),必须优先判定 */
|
||
|
|
#if defined(__clang__)
|
||
|
|
#undef C_CURRENT_COMPILER_TYPE
|
||
|
|
#undef C_CURRENT_COMPILER_NAME
|
||
|
|
#define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_CLANG
|
||
|
|
#define C_CURRENT_COMPILER_NAME "Clang"
|
||
|
|
|
||
|
|
#undef C_CURRENT_COMPILER_VERSION
|
||
|
|
#define C_CURRENT_COMPILER_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
|
||
|
|
|
||
|
|
#elif defined(__GNUC__) || defined(__GNUG__)
|
||
|
|
#undef C_CURRENT_COMPILER_TYPE
|
||
|
|
#undef C_CURRENT_COMPILER_NAME
|
||
|
|
#define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_GCC
|
||
|
|
#define C_CURRENT_COMPILER_NAME "GCC"
|
||
|
|
|
||
|
|
#undef C_CURRENT_COMPILER_VERSION
|
||
|
|
#if defined(__GNUC_PATCHLEVEL__)
|
||
|
|
#define C_CURRENT_COMPILER_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
||
|
|
#else
|
||
|
|
#define C_CURRENT_COMPILER_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100)
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#elif defined(_MSC_VER)
|
||
|
|
#undef C_CURRENT_COMPILER_TYPE
|
||
|
|
#undef C_CURRENT_COMPILER_NAME
|
||
|
|
#define C_CURRENT_COMPILER_TYPE C_COMPILER_TYPE_MSVC
|
||
|
|
#define C_CURRENT_COMPILER_NAME "Microsoft Visual C++"
|
||
|
|
|
||
|
|
#undef C_CURRENT_COMPILER_VERSION
|
||
|
|
#if defined(_MSC_FULL_VER)
|
||
|
|
#define C_CURRENT_COMPILER_VERSION (_MSC_FULL_VER / 1000)
|
||
|
|
#else
|
||
|
|
#define C_CURRENT_COMPILER_VERSION (_MSC_VER * 100)
|
||
|
|
#endif
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
/* ==============================================================================
|
||
|
|
* 🎯 2. 快捷判定辅助宏(严格以 C_ 开头,0 或 1 显式映射)
|
||
|
|
* ============================================================================== */
|
||
|
|
#if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_GCC
|
||
|
|
#define C_IS_COMPILER_GCC 1
|
||
|
|
#else
|
||
|
|
#define C_IS_COMPILER_GCC 0
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_CLANG
|
||
|
|
#define C_IS_COMPILER_CLANG 1
|
||
|
|
#else
|
||
|
|
#define C_IS_COMPILER_CLANG 0
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#if C_CURRENT_COMPILER_TYPE == C_COMPILER_TYPE_MSVC
|
||
|
|
#define C_IS_COMPILER_MSVC 1
|
||
|
|
#else
|
||
|
|
#define C_IS_COMPILER_MSVC 0
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
/* ==============================================================================
|
||
|
|
* 🎯 3. 操作系统环境识别矩阵(严格以 C_ 开头,无缝对接跨平台需求)
|
||
|
|
* ============================================================================== */
|
||
|
|
#define C_OS_TYPE_UNKNOWN 0
|
||
|
|
#define C_OS_TYPE_WINDOWS 1
|
||
|
|
#define C_OS_TYPE_LINUX 2
|
||
|
|
#define C_OS_TYPE_MACOS 3
|
||
|
|
#define C_OS_TYPE_FREEBSD 4
|
||
|
|
|
||
|
|
#define C_CURRENT_OS_TYPE C_OS_TYPE_UNKNOWN
|
||
|
|
#define C_CURRENT_OS_NAME "Unknown OS"
|
||
|
|
|
||
|
|
#if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)
|
||
|
|
#undef C_CURRENT_OS_TYPE
|
||
|
|
#undef C_CURRENT_OS_NAME
|
||
|
|
#define C_CURRENT_OS_TYPE C_OS_TYPE_WINDOWS
|
||
|
|
#define C_CURRENT_OS_NAME "Windows"
|
||
|
|
|
||
|
|
#elif defined(__APPLE__) && defined(__MACH__)
|
||
|
|
#undef C_CURRENT_OS_TYPE
|
||
|
|
#undef C_CURRENT_OS_NAME
|
||
|
|
#define C_CURRENT_OS_TYPE C_OS_TYPE_MACOS
|
||
|
|
#define C_CURRENT_OS_NAME "macOS"
|
||
|
|
|
||
|
|
#elif defined(__linux__) || defined(__linux)
|
||
|
|
#undef C_CURRENT_OS_TYPE
|
||
|
|
#undef C_CURRENT_OS_NAME
|
||
|
|
#define C_CURRENT_OS_TYPE C_OS_TYPE_LINUX
|
||
|
|
#define C_CURRENT_OS_NAME "Linux"
|
||
|
|
|
||
|
|
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||
|
|
#undef C_CURRENT_OS_TYPE
|
||
|
|
#undef C_CURRENT_OS_NAME
|
||
|
|
#define C_CURRENT_OS_TYPE C_OS_TYPE_FREEBSD
|
||
|
|
#define C_CURRENT_OS_NAME "FreeBSD"
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/* 操作系统快捷判定 */
|
||
|
|
#define C_IS_OS_WINDOWS (C_CURRENT_OS_TYPE == C_OS_TYPE_WINDOWS)
|
||
|
|
#define C_IS_OS_LINUX (C_CURRENT_OS_TYPE == C_OS_TYPE_LINUX)
|
||
|
|
#define C_IS_OS_MACOS (C_CURRENT_OS_TYPE == C_OS_TYPE_MACOS)
|
||
|
|
#define C_IS_OS_FREEBSD (C_CURRENT_OS_TYPE == C_OS_TYPE_FREEBSD)
|
||
|
|
|
||
|
|
|
||
|
|
/* ==============================================================================
|
||
|
|
* 🎯 4. 特化环境:MinGW / MSYS2 环境检测(严格以 C_ 开头)
|
||
|
|
* ============================================================================== */
|
||
|
|
#if defined(__MINGW32__) || defined(__MINGW64__)
|
||
|
|
#define C_ENVIRONMENT_IS_MINGW 1
|
||
|
|
#else
|
||
|
|
#define C_ENVIRONMENT_IS_MINGW 0
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
#endif /*INCLUDED_C_PLATFORM_H*/
|