tutorial build-process build-automation cmake autotools antlr3

build process - tutorial - Construyendo una biblioteca usando autotools de cmake



cmake tutorial (1)

Este es mi primer intento con cmake y me gustaría tener, si es posible, algunos comentarios sobre lo que hice, ya que aún quedan algunos problemas.

En el CMakeLists.txt de la carpeta de la biblioteca, creé dos destinos de makefile: configure-antlr3c y antlr3c . El primer destino ejecuta el script de configuración de autotools, el segundo ejecuta el ejecutable make para construir la biblioteca:

# CMakeLists.txt in libantlr3c-3.1.3 add_custom_target( configure-antlr3c ${SHELL_EXECUTABLE} configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) add_custom_target( antlr3c ${MAKE} DEPENDS configure-antlr3c WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )

El problema principal es que configure-antlr3c target siempre está "desactualizado", por lo que siempre se ejecutará aunque no se produzcan cambios. Además, necesariamente necesito generar mis makefiles cmake en un directorio separado (no en el directorio raíz de mi proyecto) para evitar anular los autotools Makefile de la biblioteca ...

¿Alguien ha tenido este problema (construir proyectos de autotools con cmake)? Y si es así, ¿cuáles han sido tus soluciones?

Gracias.

EDITAR: Solución en la raíz CMakeLists.txt:

include(ExternalProject) ExternalProject_Add( libantlr3c SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3 CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3/configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3 PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3 BUILD_COMMAND make BUILD_IN_SOURCE 1 )


Creo que sería mejor usar la característica ExternalProject de cmake. Supongo que tienes tu proyecto y tienes libantrl en un subdirectorio?

project +- libantlr +- mysrc ---- etc ----

Si ese es el caso, puedes hacer algo como esto en el nivel superior CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) project(test) include(ExternalProject) ExternalProject_Add(libantlr SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libantlr CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/libantlr/configure --prefix=<INSTALL_DIR> BUILD_COMMAND ${MAKE})

<INSTALL_DIR> se expande a algo así como libantlr-prefix, por lo que las cosas se instalan en su árbol de compilación en lugar de en / usr / local, que es lo que haría autotools sin un prefijo.