Насколько я понимаю, вы хотите сконфигурировать и собрать проект на основе CMake в рамках настройки и сборки хост-проекта на основе Autotools. Это возможно, и есть несколько жизнеспособных способов сделать это, но я не знаю ничего полностью упакованного, как AC_CONFIG_SUBDIRS
для подпроектов на основе Autotools.
Для конфигурации
Вариант 1 - команды конфигурации
Autoconf предоставляет группу макросов , с помощью которой вы можете указать пользовательские команды для configure
или сгенерированный сценарий config.status
для запуска. Вы можете использовать один из них - возможно, AC_CONFIG_COMMANDS
, но, возможно, AC_CONFIG_COMMANDS_POST
- для запуска cmake
(и любых необходимых подготовительных шагов) в подпроекте. Лично мне больше нравится этот вариант.
Вариант 2 - скрипт склейки
AC_CONFIG_SUBDIRS
указывает configure
запускать сценарии configure
в указанных подкаталогах, но эти другие сценарии configure
не должны генерироваться автоматическими инструментами. Можно было бы написать собственный скрипт-обертку с именем "configure
" в каталоге подпроекта для запуска родительского configure
, который сам выполняет соответствующий вызов cmake
. AC_CONFIG_SUBDIRS
в конфигурации верхнего уровня должен запустить этот скрипт в нужное время.
Вариант 3 - пользовательский код
Я думаю, что Autoconf уже обеспечивает достаточную поддержку того, что вам нужно, но если вы думаете иначе, у вас всегда есть возможность записать любой код оболочки, который вы хотите, в configure
через configure.ac
. Возможно, вам стоит написать собственный макрос для этого, особенно если у вас есть несколько подпроектов CMake, но это не обязательно. Обратите внимание, что такие команды отличаются от команд, указанных в AC_CONFIG_COMMANDS
& co. по срокам их исполнения.
для строительства
Предположительно, вы будете полагаться на рекурсив make
на этапах сборки и установки. Это не должно быть трудно, если вы используете Makefile.in
на основе Automake или свернутый вручную на верхнем уровне.
Вариант 1 - Automake + make-файл клея
Используйте переменную SUBDIRS
в вашем верхнем уровне Makefile.am
, чтобы направить make
для рекурсии в подкаталог проекта CMake, так же, как вы делали бы это в любом другом проекте. Напишите там простой Makefile, который будет возвращаться в подкаталог build
(который вы должны будете убедиться, что он создан и настроен configure
). Это не должно вступать в противоречие с подпроектом, поскольку предполагает использование отдельного каталога сборки. Склеенный make-файл может адаптировать цели и make
переменных к ожиданиям системы сборки подпроекта.
Документация Automake описывает все рекурсивные цели , которые makefile верхнего уровня Autotools может попытаться построить рекурсивно, а make-файл клея должен предоставить все из них - хотя многим может потребоваться только фиктивный (но не пустой) рецепт.
Вариант 2 - свернутый вручную верхний уровень Makefile.in
Если, с другой стороны, вы используете свернутый вручную шаблон Makefile
верхнего уровня, тогда вы имеете полный контроль над рекурсивными вызовами make
. В этом случае вы все еще можете использовать связующий make-файл в подпроекте, но, вероятно, проще и понятнее просто напрямую адаптироваться к ожидаемому сгенерированному CMake make-файлу.