Для создания переносимой системы сборки лучше не тестировать платформы, а тестировать функции.
Вместо проверки «если Windows тогда сделает это», проверьте «работает ли флаг -Wno-invalid-offsetof, а затем используйте его». Это можно сделать с помощью модуля CheckCCompilerFlag, например:
include(CheckCCompilerFlag)
check_c_compiler_flag(-Wno-invalid-offsetof HAS_NO_INVALID_OFFSETOF)
if (HAS_NO_INVALID_OFFSETOF)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-invalid-offsetof")
endif()
Для C ++ существует аналогичный CheckCXXCompilerFlag с командой check_cxx_compiler_flag(flag var)
.