# DetectOS.cmake function(add_os_definitions target) # 初始化所有平台宏为 0 set(PLATFORMS WINDOWS MACOS LINUX FREEBSD) # 检测操作系统并设置相应的宏为 1 if(WIN32) target_compile_definitions(${target} PRIVATE WINDOWS=1) message(STATUS "Detected Windows operating system") list(REMOVE_ITEM PLATFORMS WINDOWS) elseif(APPLE) target_compile_definitions(${target} PRIVATE MACOS=1) message(STATUS "Detected macOS operating system") list(REMOVE_ITEM PLATFORMS MACOS) elseif(UNIX) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") target_compile_definitions(${target} PRIVATE LINUX=1) message(STATUS "Detected Linux operating system") list(REMOVE_ITEM PLATFORMS LINUX) elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_compile_definitions(${target} PRIVATE FREEBSD=1) message(STATUS "Detected FreeBSD operating system") list(REMOVE_ITEM PLATFORMS FREEBSD) else() message(WARNING "Detected unknown Unix-like operating system") endif() else() message(WARNING "Unknown operating system") endif() foreach(PLATFORM ${PLATFORMS}) target_compile_definitions(${target} PRIVATE ${PLATFORM}=0) endforeach() # 检测并设置架构宏 if(CMAKE_SIZEOF_VOID_P EQUAL 8) target_compile_definitions(${target} PRIVATE ARCH_64BIT=1 ARCH_32BIT=0) message(STATUS "Detected 64-bit architecture") else() target_compile_definitions(${target} PRIVATE ARCH_64BIT=0 ARCH_32BIT=1) message(STATUS "Detected 32-bit architecture") endif() # 设置通用的 UNIX 宏 if(UNIX) target_compile_definitions(${target} PRIVATE UNIX=1) else() target_compile_definitions(${target} PRIVATE UNIX=0) endif() # 设置通用的 POSIX 宏 if(UNIX OR APPLE) target_compile_definitions(${target} PRIVATE POSIX=1) else() target_compile_definitions(${target} PRIVATE POSIX=0) endif() endfunction()