2009-02-12 7 views
6

Мне интересно, как я могу сделать портативную систему сборки (шаг за шагом), в настоящее время я использую cmake, потому что ее было легко настроить в первую очередь, имея только одну цель арки, но теперь, когда я должен упаковать библиотеку, которую я разрабатываю, мне интересно, как наилучшим образом сделать ее переносимой для arch, которую я тестирую.Build System и переносимость

Я знаю, что мне нужно config.h, чтобы определять вещи в зависимости от арки, но я не знаю, как это возможно.

Любой другой способ иметь систему сборки приветствуется!

ответ

10

Вы можете просто использовать 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.

BTW, для тестирования edianness см this mail

2

Я использую GNU autoconf/automake toolchain, который до сих пор хорошо работал для меня. Я только очень сосредоточен на Linux/x86 (и 64-битной) и Mac, что важно, если вы строите PowerPC, из-за проблем с endian.

С Autoconf вы можете проверить хост-платформы с помощью макроса:

AC_CANONICAL_HOST 

и проверить с помощью порядка байтов:

AC_C_BIGENDIAN 

Autoconf будет добавлять определения в config.h, которые вы можете использовать в ваш код.

Я не уверен (никогда не пробовал), как работает GNU autotools на Windows, поэтому, если Windows является одной из ваших целей, вам может быть лучше найти аналогичные функции с существующей системой сборки cmake.

Для хорошей грунтовки на Autotools, посмотрите здесь:

http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool

+0

окна никогда не будет целью для меня, я надеюсь;) – claf

 Смежные вопросы

  • Нет связанных вопросов^_^