# DetectOS.cmake function(add_os_definitions target) # 初始化所有平台宏为 0 set(PLATFORMS AORII_WINDOWS AORII_MACOS AORII_LINUX AORII_FREEBSD AORII_IOS AORII_ANDROID) # 检测操作系统并设置相应的宏为 1 if(WIN32) target_compile_definitions(${target} PUBLIC AORII_WINDOWS=1) message(STATUS "Detected Windows operating system") list(REMOVE_ITEM PLATFORMS AORII_WINDOWS) elseif(APPLE AND UNIX) target_compile_definitions(${target} PUBLIC AORII_MACOS=1) message(STATUS "Detected macOS operating system") list(REMOVE_ITEM PLATFORMS AORII_MACOS) elseif(UNIX) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") target_compile_definitions(${target} PUBLIC AORII_LINUX=1) message(STATUS "Detected Linux operating system") list(REMOVE_ITEM PLATFORMS AORII_LINUX) elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") target_compile_definitions(${target} PUBLIC AORII_FREEBSD=1) message(STATUS "Detected FreeBSD operating system") list(REMOVE_ITEM PLATFORMS AORII_FREEBSD) else() message(WARNING "Detected unknown Unix-like operating system") endif() elseif(ANDROID) target_compile_definitions(${target} PUBLIC AORII_ANDROID=1) message(STATUS "Detected Android operating system") list(REMOVE_ITEM PLATFORMS AORII_ANDROID) elseif(IOS) target_compile_definitions(${target} PUBLIC AORII_IOS=1) message(STATUS "Detected iOS operating system") list(REMOVE_ITEM PLATFORMS AORII_IOS) else() message(WARNING "Unknown operating system") endif() foreach(PLATFORM ${PLATFORMS}) target_compile_definitions(${target} PUBLIC ${PLATFORM}=0) endforeach() # 检测并设置架构宏 if(CMAKE_SIZEOF_VOID_P EQUAL 8) target_compile_definitions(${target} PUBLIC AORII_ARCH_64BIT=1 AORII_ARCH_32BIT=0) message(STATUS "Detected 64-bit architecture") else() target_compile_definitions(${target} PUBLIC AORII_ARCH_64BIT=0 AORII_ARCH_32BIT=1) message(STATUS "Detected 32-bit architecture") endif() # 设置通用的 UNIX 宏 if(UNIX) target_compile_definitions(${target} PUBLIC AORII_UNIX=1) else() target_compile_definitions(${target} PUBLIC AORII_UNIX=0) endif() # 设置通用的 POSIX 宏 if(UNIX OR APPLE) target_compile_definitions(${target} PUBLIC AORII_POSIX=1) else() target_compile_definitions(${target} PUBLIC AORII_POSIX=0) endif() # 设置IS_MOBILE宏 if(ANDROID OR IOS) target_compile_definitions(${target} PUBLIC AORII_IS_MOBILE=1) else() target_compile_definitions(${target} PUBLIC AORII_IS_MOBILE=0) endif() endfunction()