tutorial make descarga cmake build-system

cmake - make - Sistema de construcción y portabilidad



cmake vs make (2)

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

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

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


He estado utilizando 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 puede verificar la plataforma de host con la macro:

AC_CANONICAL_HOST

Y revisa la endianidad usando:

AC_C_BIGENDIAN

Autoconf agregará definiciones a config.h que puede usar en su código.

No estoy seguro (nunca lo he intentado) de lo bien que funcionan las autotools de GNU en Windows, así que si Windows es uno de sus objetivos, entonces será mejor que encuentre una funcionalidad similar con su sistema de compilación cmake existente.

Para una buena introducción a las autotools, mira aquí:

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


Puedes usar CMake, es bastante sencillo.

Necesitas estas cosas:

Primero, significa descubrir los detalles de la configuración. Por ejemplo, si sabe que alguna función tiene un nombre diferente en alguna plataforma, puede usar TRY_COMPILE para 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 su directorio fuente que compila solo 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 puede agregarlo para compilar banderas

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

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

#cmakedefine HAVE_ALTERNATIVE_FUNCS

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

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

el #cmakedefine se traducirá a #define o #undef dependiendo de la variable CMake.

Por cierto, para comprobar el estado, mira este correo