Подтвердить что ты не робот

Как мне преобразовать проект Autotools в проект CMake?

Так что, похоже, много написано на тему Autotools против CMake, но я не могу найти хорошего учебника о том, как конвертировать проект из Autotools (Makefile.am и configure.ac файлы) в CMake (файлы CMakeLists.txt). Как можно это сделать?

4b9b3361

Ответ 1

Нет автоматизированного инструмента, который преобразует произвольную систему сборки из autotools в cmake. Я преобразовал несколько умеренно больших проектов вручную. Мне нравится создавать один CMakeLists.txt файл для каждого набора файлов configure.ac и/или Makefile.am, чтобы облегчить преобразование из autotools в cmake.

К сожалению, этот ручной подход требует разработки опыта в двух системах, ни один из которых не должен налагаться на любых невинных.

  • Захват записи о том, что на самом деле создает autotools на вашем компьютере. Это поможет вам проверить, что ваша система сборки CMake фактически компилирует каждый файл, используя одни и те же флаги компиляции, и создает каждую библиотеку и исполняемый файл, который делает autotools; по крайней мере, на вашем компьютере, с вашими вариантами.

    %./configure [настроить параметры] > configure_autotools.log

    % make > make_autotools.log

    % make install > make_install_autotools.log

  • В каждом каталоге, содержащем файл configure.ac или Makefile.am, включая корневой каталог проекта, создайте новый пустой файл CMakeLists.txt. Добавьте команды cmake add_subdirectory (...) в каждый нелистный файл CMakeLists.txt, чтобы связать все файлы cmake вместе в древовидной структуре. Добавьте команды cmake project() и cmake_minimum_required() в верхнюю часть вашего CMakeLists.txt файла верхнего уровня.

    project(MyProject)
    cmake_minimum_required(VERSION 2.8)
    add_subdirectory(foo)
    
  • Теперь у вас есть последовательная, но бесполезная система сборки cmake, которая ничего не делает. Временно добавьте несколько команд message(...) в более глубокие файлы CMakeLists.txt, чтобы убедиться, что все подключено правильно. Помните, что message() является вашим другом при отладке проблем конфигурации cmake. Убедитесь, что ваша инфраструктура cmake работает, пытаясь построить сейчас. Ничто не будет построено или установлено; но в данный момент полезно использовать инфраструктуру cmake.

    % mkdir build_cmake

    % cd build_cmake

    % ccmake -i [ваш корень проекта]

    [настроить, настроить, сгенерировать]

    % сделать VERBOSE = 1

    % make install

  • Это трудная часть. Один за другим заполняйте файлы CMakeLists.txt. Вот несколько рекомендаций:

    • Откройте два бок-о-боковых редактора, один с файлом CMakeLists.txt, другой с соответствующим файлом Makefile.am/configure.ac.

    • Откройте ваш браузер для документации команд cmake.

    • Вместо того, чтобы начинать с самого верха, начните с создания правил cmake для создания небольшой библиотеки или исполняемого файла, если вы можете найти его в проекте (cmake add_library() или add_executable()). Используя этот подход, вы можете наращивать конверсию за один раз.

    • Периодически проверяйте свою систему сборки cmake при добавлении каждой цели.

    • Мне нравится использовать команду cmake file(GLOB ...) для компактного создания списков исходных файлов. Имейте в виду, что это спорное мнение.

    • Многие обычные строфы autotools имеют соответствующие команды CMake. Например, autoconf AC_TRY_COMPILE может быть преобразован в cmake TRY_COMPILE, Но в основном я считаю, что должен понять, что делает каждая маленькая строчка autotools, и выяснить, как написать соответствующий cmake. Кроме того, существует серия модулей CMake, которые помогают создавать файлы config.h, похожие на autotools. Файлы Makefile.am часто легче конвертировать и могут фактически стать более компактными после перевода в cmake.

    • Сравните результаты сборки cmake с журналами autotools, которые вы зафиксировали на шаге 1. Являются ли флаговые компиляции одинаковыми? Все ли построены одни и те же цели? Установлены ли те же файлы?

    • К сожалению, я недавно не преобразовал autotools в cmake, поэтому я не могу написать исчерпывающий "если вы видите x в Makefile.am, напишите y в CMakeLists.txt". Может ли кто-нибудь предложить хорошее место для общедоступной вики, где люди, которые активно переходят из autotools в cmake, могут накапливать полный набор таких рекомендаций? Я не уверен, что этот ответ stackoverflow является лучшим местом для такого списка...

  • Для дополнительного кредита, как только вы все это сделаете, настройте свои правила cmake, чтобы иметь возможность создавать и запускать проект из Windows Visual Studio. Попробуйте это с помощью autotools!

Ответ 2

Это преобразование очень специфично для проекта, и это затрудняет запись обычно применимого учебника.

Вот начало некоторых инструментов, которые могут дать вам некоторое вдохновение в том, что делать.

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

===== Интересная статья, связанная с этим:

Почему проект KDE переключился на CMake - и как (продолжение) http://lwn.net/Articles/188693/