2009-02-12 18 views
6

Ich frage mich, wie ich ein tragbares Build-System (Schritt-für-Schritt) machen kann, verwende ich derzeit Cmake, weil es in erster Linie einfach einzurichten war, mit nur einem Bogen Ziel, aber Jetzt, da ich die Bibliothek, die ich entwickle, paketieren muss, frage ich mich, wie es am besten ist, sie für Arch zu portieren, die ich teste.Build-System und Portabilität

Ich weiß, dass ich eine config.h brauche, um die Dinge abhängig vom Bogen zu definieren, aber ich weiß nicht, wie automatisch das sein kann.

Jede andere Möglichkeit, ein Build-System zu haben, sind herzlich willkommen!

Antwort

10

Sie können nur CMake verwenden, es ist ziemlich einfach.

Sie müssen diese Dinge:

Erstens bedeutet die Konfiguration Besonderheiten zu erfahren. Wenn Sie beispielsweise wissen, dass einige Funktion auf einige Plattform anders benannt ist, können Sie TRY_COMPILE verwenden, um das zu entdecken:

TRY_COMPILE(HAVE_ALTERNATIVE_FUNC 
    ${CMAKE_BINARY_DIR} 
    ${CMAKE_SOURCE_DIR}/alternative_function_test.cpp 
    CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx 
) 

wo alternative_function_test.cpp ist eine Datei im Quellverzeichnis, das nur mit der alternativen Definition kompiliert.

Dies definiert die Variable HAVE_ALTERNATIVE_FUNC, wenn die Kompilierung erfolgreich ist.

Zweitens müssen Sie diese Definition auf Ihre Quellen auswirken. Entweder können Sie es hinzufügen Flags kompilieren

IF(HAVE_TR1_RANDOM) 
    ADD_DEFINITIONS(-DHAVE_TR1_RANDOM) 
ENDIF(HAVE_TR1_RANDOM) 

oder Sie können eine config.h Datei. Erstellen config.h.in mit der folgenden Zeile

#cmakedefine HAVE_ALTERNATIVE_FUNCS 

und erstellen Sie eine config.h Datei von dieser Linie in CMakeLists.txt (siehe CONFIGURE_FILE)

CONFIGURE_FILE(config.h.in config.h @ONLY) 

die #cmakedefine wird #define oder #undef in Abhängigkeit von der CMake Variable übersetzt werden.

BTW, für die Prüfung edianness finden this mail

2

Ich habe die autoconf/automake toolchain von GNU benutzt, die für mich bisher gut funktioniert hat. Ich konzentriere mich nur auf Linux/x86 (und 64bit) und den Mac, was wichtig ist, wenn Sie auf einem PowerPC aufbauen, aufgrund von Endian-Problemen.

Mit autoconf können Sie die Host-Plattform mit dem Makro überprüfen:

AC_CANONICAL_HOST 

und überprüfen Sie die Endian mit:

AC_C_BIGENDIAN 

Autoconf wird dann Definitionen in den config.h, die Sie in verwenden können dein Code.

Ich bin nicht sicher (habe noch nie versucht), wie gut die GNU-Autotools unter Windows funktionieren. Wenn Windows eines Ihrer Ziele ist, dann ist es vielleicht besser, ähnliche Funktionen mit Ihrem bestehenden cmake-Buildsystem zu finden.

Für eine gute Grundierung auf den Autotools, einen Blick hier:

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

+0

Fenster wird nie ein Ziel für mich sein, ich hoffe;) – claf

Verwandte Themen