2009-02-12 19 views
6

Me pregunto cómo puedo hacer un sistema de compilación portátil (paso a paso), actualmente uso cmake porque fue fácil de configurar en primer lugar, con solo un objetivo de arco, pero ahora que tengo que empaquetar la biblioteca que estoy desarrollando me pregunto cómo es la mejor manera de hacerlo portátil para el arco que estoy probando.Sistema de compilación y portabilidad

Sé que necesito una configuración para definir las cosas dependiendo del arco, pero no sé qué tan automático puede ser.

¡Cualquier otra forma de tener un sistema de construcción es una calurosa bienvenida!

Respuesta

10

Usted sólo puede usar CMake, es bastante sencillo.

usted necesita estas cosas:

En primer lugar, los medios para averiguar los detalles de configuración. Por ejemplo, si sabe que alguna función se denomina de forma diferente en alguna plataforma, puede utilizar TRY_COMPILE al descubrir que:

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

donde alternative_function_test.cpp es un archivo en el directorio de origen que compila sólo con la definición alternativa.

Esto definirá la variable HAVE_ALTERNATIVE_FUNC si la compilación tiene éxito.

En segundo lugar, debe hacer que esta definición afecte sus fuentes. O se puede añadir a compilar banderas

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

o se puede hacer un archivo config.h. Crear config.h.in con la siguiente línea

#cmakedefine HAVE_ALTERNATIVE_FUNCS 

y crear un archivo config.h por esta línea en CMakeLists.txt (ver CONFIGURE_FILE)

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

la #cmakedefine se traducirán a #define o #undef en función de la variable CMake.

Por cierto, para edianness prueba, ver this mail

2

He estado usando la herramienta de autoconf/automake de GNU que hasta ahora me ha funcionado. Solo estoy enfocado en Linux/x86 (y 64 bits) y la Mac, que es importante si está utilizando un PowerPC, debido a problemas endian.

Con autoconf se puede comprobar la plataforma de host con la macro:

AC_CANONICAL_HOST 

y comprobar el orden de bits usando:

AC_C_BIGENDIAN 

Autoconf A continuación, añadir definiciones en config.h que se puede utilizar en tu codigo.

No estoy seguro (nunca lo he intentado) de qué tan bien funcionan las autotools de GNU en Windows, por lo que si Windows es uno de sus objetivos, es mejor que encuentre una funcionalidad similar con su sistema de construcción cmake existente.

Para una buena introducción a los autotools, echar un vistazo aquí:

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

+0

ventanas nunca será un objetivo para mí espero;) – claf

Cuestiones relacionadas