Question

Je me demande comment je peux faire un système de construction portable (étape par étape), j'utilise actuellement CMake parce qu'il était facile de mettre en place en premier lieu, avec une seule cible de la voûte plantaire, mais maintenant que je pour emballer la bibliothèque que je développe, je me demande comment est la meilleure façon de le rendre portable pour arc je teste.

Je sais que je besoin d'un config.h pour définir les choses en fonction de l'arc mais je ne sais pas comment cela peut être automatique.

Toute autre façon d'avoir un système de construction sont les bienvenus!

Était-ce utile?

La solution

Vous pouvez simplement utiliser CMake, il est assez simple.

Vous avez besoin de ces choses:

Tout d'abord, les moyens de connaître les détails de configuration. Par exemple, si vous savez que certaines fonctions est nommée différemment sur une plate-forme, vous pouvez utiliser TRY_COMPILE pour découvrir que:

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

alternative_function_test.cpp est un fichier dans votre répertoire source qui compile uniquement avec la définition alternative.

définira HAVE_ALTERNATIVE_FUNC variable si la compilation réussit.

En second lieu, vous devez faire cette définition affecte vos sources. Soit vous pouvez l'ajouter à compiler des drapeaux

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

ou vous pouvez créer un fichier config.h. Créer config.h.in avec la ligne suivante

#cmakedefine HAVE_ALTERNATIVE_FUNCS

et créer un fichier config.h par cette ligne CMakeLists.txt (voir CONFIGURE_FILE )

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

#cmakedefine sera traduit à #define ou #undef en fonction de la variable CMake.

BTW, pour les tests edianness, voir ce courrier

Autres conseils

J'utilise la autoconf GNU / automake toolchain qui a bien fonctionné pour moi jusqu'à présent. Je ne fais que vraiment concentré sur Linux / x86 (et 64 bits) et Mac, ce qui est important si vous construisez sur un PowerPC, en raison de problèmes endian.

Avec autoconf vous pouvez vérifier la plate-forme hôte avec la macro:

AC_CANONICAL_HOST

Et vérifier le boutisme en utilisant:

AC_C_BIGENDIAN

Autoconf ensuite ajouter des définitions config.h que vous pouvez utiliser dans votre code.

Je ne suis pas certain (ont jamais essayé) comment les autotools GNU fonctionnent sous Windows, si Windows est l'un de vos objectifs alors vous pouvez être mieux de trouver des fonctionnalités similaires avec votre système de compilation CMake existant.

Pour une bonne introduction sur les autotools, jetez un oeil ici:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top