CMAKE_SYSTEM_NAME detect operating system
CMake OS name flags like APPLE and UNIX are terse and are frequently used. A possible downside is their have broad, overlapping meanings.
In contrast, CMAKE_SYSTEM_NAME has more fine-grained values.
However, it is often more convenient (if using care) to use terse variables that are not as specific:
if(APPLE)
# macOS
elseif(BSD)
# FreeBSD, NetBSD, OpenBSD, etc.
elseif(LINUX)
# Linux
elseif(UNIX)
# Linux, BSD, etc. (including macOS if not trapped above)
elseif(WIN32)
# Windows
else()
message(FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME}")
endif()
There is not one “right” or “wrong” way.