Вы можете просто использовать CMake, это довольно просто.
Вам нужны эти вещи:
Во-первых, означает выяснить особенности конфигурации. Например, если вы знаете, что некоторые функции называются по-разному на некоторой платформе, вы можете использовать TRY_COMPILE
, чтобы обнаружить, что:
TRY_COMPILE(HAVE_ALTERNATIVE_FUNC
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/alternative_function_test.cpp
CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx
)
где alternative_function_test.cpp
- это файл в вашем исходном каталоге, который компилируется только с альтернативным определением.
Это определит переменную HAVE_ALTERNATIVE_FUNC
в случае успешной компиляции.
Во-вторых, вам нужно, чтобы это определение влияло на ваши источники. Либо вы можете добавить его для компиляции флагов
IF(HAVE_TR1_RANDOM)
ADD_DEFINITIONS(-DHAVE_TR1_RANDOM)
ENDIF(HAVE_TR1_RANDOM)
или вы можете сделать файл config.h
. Создайте config.h.in
со следующей строкой
#cmakedefine HAVE_ALTERNATIVE_FUNCS
и создайте файл config.h
по этой строке в CMakeLists.txt
(см. CONFIGURE_FILE
)
CONFIGURE_FILE(config.h.in config.h @ONLY)
#cmakedefine
будет переведено в #define
или #undef
в зависимости от переменной CMake.
Кстати, для проверки edianness см. это письмо