Система сборки и мобильность - PullRequest
6 голосов
/ 12 февраля 2009

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

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

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

Ответы [ 2 ]

10 голосов
/ 12 февраля 2009

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

2 голосов
/ 12 февраля 2009

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

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

AC_CANONICAL_HOST

И проверьте порядковый номер, используя:

AC_C_BIGENDIAN

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...