您应该使用配置脚本来执行平台检查并生成适当的编译器标志和/或配置头文件。
有几个工具可以执行此任务,例如autotools, Scons或Cmake。
在您的情况下,我建议使用CMake,因为它与Windows很好地集成,能够生成Visual Studio项目文件以及Mingw makefiles。
这些工具背后的主要哲学是,您不再针对操作系统本身进行测试,而是针对可能存在或不存在的功能或其值可能会变化的特性进行测试,从而降低了代码无法编译的风险,出现"平台不受支持"的错误。
这里是一个有注释的CMake示例(CMakeFiles.txt):
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckTypeSize)
include(TestBigEndian)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stddef.h HAVE_STDDEF_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_type_size("double" SIZEOF_DOUBLE)
check_type_size("float" SIZEOF_FLOAT)
check_type_size("long double" SIZEOF_LONG_DOUBLE)
test_big_endian(IS_BIGENDIAN)
if(IS_BIGENDIAN)
set(WORDS_BIGENDIAN 1)
endif(IS_BIGENDIAN)
configure_file(config-cmake.h.in ${CMAKE_BINARY_DIR}/config.h)
include_directories(${CMAKE_BINARY_DIR})
add_definitions(-DHAVE_CONFIG_H)
因此,您需要提供一个config-cmake.h.in模板,该模板将由cmake处理以生成一个包含所需定义的config.h文件:
#cmakedefine HAVE_SYS_TYPES_H
#cmakedefine HAVE_STDINT_H
#cmakedefine WORDS_BIGENDIAN
#define SIZEOF_DOUBLE @SIZEOF_DOUBLE@
#define SIZEOF_FLOAT @SIZEOF_FLOAT@
#define SIZEOF_LONG_DOUBLE @SIZEOF_LONG_DOUBLE@
我邀请你去cmake网站了解更多关于这个工具的信息。
就个人而言,我是cmake的粉丝,我在我的个人项目中使用它。