Système et la portabilité Construire
-
22-08-2019 - |
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!
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
)
où 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