Как обрабатывать проект автоинструментов с зависимостью cmake? - PullRequest
0 голосов
/ 12 июля 2019

У меня есть проект C на автоинструментах, которому нужно использовать другую библиотеку, созданную с помощью CMake.Являются ли они эквивалентом AC_CONFIG_SUBDIRS, который будет работать с CMake?

1 Ответ

1 голос
/ 12 июля 2019

Насколько я понимаю, вы хотите сконфигурировать и собрать проект на основе 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-файлу.

...