2011-08-20 12 views

Respuesta

72

No hay automatizado herramienta que convertirá un sistema de compilación arbitrario de autotools a cmake. He convertido algunos proyectos moderadamente grandes de forma manual. Me gusta crear un archivo CMakeLists.txt para cada conjunto de archivos configure.ac y/o Makefile.am, para facilitar la conversión de autotools a cmake.

Lamentablemente, este enfoque manual requiere desarrollar una experiencia en dos sistemas, ninguno de los cuales debe infligirse a ningún inocente.

  1. Capture un registro de lo que la creación autotools realmente hace en su máquina. Esto le ayudará a verificar que su sistema de compilación CMake en realidad compila cada archivo, utilizando los mismos indicadores de compilación, y crea cada biblioteca y ejecutable que autotools hace; al menos en tu máquina, con tus opciones.

    % ./configure [configurar opciones]> configure_autotools.log

    % maquillaje> make_autotools.log

    % make install> make_install_autotools.log

  2. En cada directorio que contiene un archivo configure.ac o Makefile.am, incluido el directorio raíz del proyecto, crea un nuevo archivo CMakeLists.txt vacío. Agregue los mandatos cmake add_subdirectory (...) a cada archivo CMakeLists.txt no hoja para vincular todos los archivos cmake en una estructura de árbol. Agregue los mandatos cmake project() y cmake_minimum_required() a la parte superior de su archivo CMakeLists.txt de nivel superior.

    project(MyProject) 
    cmake_minimum_required(VERSION 2.8) 
    add_subdirectory(foo) 
    
  3. Ahora tiene un sistema de construcción CMake constante pero inútil que no hace nada. Agregue temporalmente algunos comandos message(...) en los archivos CMakeLists.txt más profundos para verificar que todo esté conectado correctamente. Recuerde que message() es su amigo al depurar problemas de configuración de cmake. Asegúrate de que tu infraestructura de cmake funcione probando una construcción ahora. Nada se construirá o instalará; pero es valioso ejercer la infraestructura de cmake en este punto.

    % build_cmake mkdir

    % cd build_cmake

    % -i ccmake [su raíz del proyecto]

    [configurar, configurar, generar]

    % realiza VERBOSE = 1

    % make install

  4. Esta es la parte difícil. Uno por uno, complete sus archivos CMakeLists.txt. Aquí hay algunas pautas:

    • Abra dos editores de lado a lado, uno con el archivo CMakeLists.txt, el otro con el archivo Makefile.am/configure.ac correspondiente.

    • Tenga su buscador abierto en el cmake commands documentation.

    • En lugar de empezar desde lo más alto, empezar por la creación de reglas cmake para la construcción de una pequeña biblioteca o ejecutable, si se puede encontrar uno en el proyecto (cmake add_library() o add_executable()). Usando este enfoque, puede construir su conversión de una pieza a la vez.

    • Mantenga periódicamente la prueba de su sistema de construcción cmake a medida que agrega cada objetivo.

    • Me gusta usar el comando cmake file(GLOB ...) para crear listas de archivos fuente de forma compacta. Tenga en cuenta que esta es una opinión controvertida.

    • Muchas stanzas de autotools comunes tienen CMake commands correspondiente. Por ejemplo, autoconf AC_TRY_COMPILE se puede convertir a cmake TRY_COMPILE. Pero la mayoría de las veces encuentro que tengo que entender lo que hace cada pequeña estrofa de autotools y averiguar cómo escribir el cmake correspondiente. Además, hay un series of CMake modules que ayuda a crear archivos config.h de tipo autotools. Los archivos Makefile.am a menudo son más fáciles de convertir y, de hecho, pueden volverse más compactos después de la traducción a cmake.

    • Compare sus resultados de compilación de cmake con los registros de autotools que capturó en el paso 1. ¿Los indicadores de compilación son los mismos? ¿Se construyen todos los mismos objetivos? ¿Están los mismos archivos instalados?

    • Desafortunadamente no he convertido autotools para cmake recientemente, por lo que no estoy en posición de escribir un completo "si ves x en Makefile.am, escribe y en CMakeLists.txt". ¿Puede alguien sugerir una buena ubicación para una wiki pública donde las personas que están convirtiendo activamente de autotools a cmake pueden acumular un conjunto completo de tales pautas? No estoy seguro de si esta respuesta stackoverflow es el mejor lugar para una lista de este tipo ...

  5. Para el crédito, una vez que lo tienes todo de trabajo, ajustar sus reglas cmake para poder construir y extra run su proyecto de Windows Visual Studio. ¡Inténtalo con autotools!

+4

No quiero una herramienta automática.Es este tipo de discusión exacta y el consejo general que estoy buscando. Cosas como, "Me gusta crear una CmakeLists.txt firl para cada conjunto de archivos configure.ac y Makefile.am". Si pueden dar más detalles sobre esto, les otorgaré la recompensa. –

+1

@KurtisNusbaum: Edité mi respuesta para explicar el proceso por el que pasé, con los pasos y más pautas. ¿Es más útil de esta manera? –

+2

Esto es lo mejor que he visto hasta ahora. Realmente me gustaría ver un "si ves x en Makefile.am, escribe y en CMakeLists.txt". Si alguien lo encuentra, avíseme. –

10

Esta conversión es muy específica de un proyecto, y eso hace que escribir un tutorial generalmente aplicable sea difícil.

Aquí está el inicio de algunas herramientas que pueden darle alguna inspiración de qué hacer.

http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake

===== Un artículo interesante relacionado con esto:

Por qué el proyecto KDE cambió a CMake - y cómo (continuación) http://lwn.net/Articles/188693/

+0

Vi esos. Pero son tan taaaan específicos de KDE que no los encontré tan útiles. –