Tutorial para convertir Autotools a CMake


Así que parece haber mucha escritura sobre el tema de Autotools vs.CMake, pero por mi vida no puedo encontrar un buen tutorial sobre cómo convertir un proyecto de Autotools a CMake. ¿Alguien sabe de uno?

Author: sashoalm, 2011-08-20

2 answers

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

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

  1. Capture un registro de lo que autotools construye en realidad lo hace en su máquina. Esto le ayudará a verificar que su sistema de compilación de CMake realmente compila cada archivo, usando las mismas banderas de compilación, y crea cada biblioteca y ejecutable que autotools hace; al menos en su máquina, con sus opciones.

    % ./ configure [opciones de configuración] > configure_autotools.log

    % make > make_autotools.log

    % make install > make_install_autotools.log

  2. En cada directorio que contiene un archivo configure.ac o Makefile.am, incluyendo el directorio raíz del proyecto, crea nuevas listas de CMakeLists vacías.archivo txt. Añadir cmake add_subdirectory(...) comandos a cada CMakeLists no hoja.archivo txt para enlazar todos los archivos cmake juntos en una estructura de árbol. Agregue los comandos cmake project() y cmake_minimum_required() a la parte superior de sus listas de CMAKEL de nivel superior.archivo txt.

    project(MyProject)
    cmake_minimum_required(VERSION 2.8)
    add_subdirectory(foo)
    
  3. Ahora tiene un sistema de compilación cmake consistente pero inútil que no hace nada. Añadir temporalmente algunos message(...) comandos en las listas más profundas de CMakeLists.archivos txt para verificar que todo está conectado correctamente. Recuerde que message() es su amigo al depurar problemas de configuración de cmake. Asegúrese de que su infraestructura de cmake funcione probando una compilación ahora. Nada se construirá o instalará; pero es valioso ejercer la infraestructura cmake en este punto.

    % mkdir build_cmake

    % cd build_cmake

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

    [configure, configure, generate]

    % make VERBOSE = 1

    % make install

  4. Esta es la parte difícil. Uno por uno, rellene sus listas de CMakeLists.archivos txt. He aquí algunas pautas:

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

    • Abra su navegador a la documentación cmake commands .

    • En lugar de comenzar desde el principio, comience creando reglas cmake para construir una pequeña biblioteca o ejecutable, si puede encontrar uno en el proyecto (cmake add_library() o add_executable()). Usando este enfoque puedes construir tu conversión una pieza a la vez.

    • Siga probando periódicamente su sistema de compilación cmake a medida que agrega cada objetivo.

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

    • Muchas estrofas comunes de autotools tienen correspondientes comandos CMake. Por ejemplo autoconf AC_TRY_COMPILEse puede convertir a cmake TRY_COMPILE. Pero sobre todo me parece que tengo que entender lo que hace cada pequeña estrofa de autotools y averiguar cómo escribir el cmake correspondiente. Además, hay una serie de módulos CMake que ayudan a crear una configuración similar a autotools.archivos h. Makefile.am los archivos son a menudo más fácil de convertir, y en realidad puede llegar a ser más compacto después de la traducción a cmake.

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

    • Desafortunadamente no he convertido autotools a cmake recientemente, así que no estoy en condiciones de escribir un completo " si ves x en Makefile.am, escribe y en las listas de CMakeLists.txt". Puede alguien ¿sugiere una buena ubicación para una wiki pública donde las personas que están convirtiendo activamente de autotools a cmake puedan acumular un conjunto completo de dichas pautas? No estoy seguro de si esta respuesta de stackoverflow es el mejor lugar para tal lista...

  5. Para obtener crédito adicional, una vez que lo tenga todo funcionando, modifique las reglas de cmake para poder construir y ejecutar su proyecto desde Windows Visual Studio. Prueba eso con autotools!

 76
Author: Christopher Bruns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-07 14:03:34

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

Aquí está el comienzo 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 and y cómo (continued) http://lwn.net/Articles/188693 /

 11
Author: Hans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-25 13:32:47