Может ли проект одновременно поддерживать Autotools и Cmake?

Мне кажется (но, возможно, это миф), что Cmake лучше, чем Autotools, облегчает поддержку Microsoft.

В то же время я уверен, что Autotools еще проще, чем Cmake, когда дело доходит до важных производных UNIX, таких как macOS и большинство популярных дистрибутивов Linux.

Что если я не могу выбрать?

Может ли проект одновременно поддерживать Autotools и Cmake?

Бонус за: может ли проект поддерживать как Autotools, так и Cmake и даже просто голый Make одновременно?

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

Наконец, вы знаете пример проекта, который использует как Autotools, так и Cmake? Тот, который использует оба Autotools, Cmake и просто голые Make?

1 ответ

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

Нет, вы не можете (легко) одновременно поддерживать голую марку и любую из вышеперечисленных систем. Ни Autotools, ни CMake на самом деле не являются инструментами для сборки. Они "генераторы инструментов сборки". Таким образом, вы не запускаете autotools или cmake, и в результате получается ваш собранный проект: вместо этого вы запускаете autotools или cmake, и они генерируют управляющие файлы для инструмента сборки. Затем вы запускаете инструмент сборки, и в результате получается ваш собранный проект.

Autotools генерирует make-файлы, а cmake генерирует множество различных типов управляющих файлов, где make-файлы являются одними из самых распространенных.

Таким образом, вы не можете иметь свой собственный make-файл в своем проекте, потому что они будут конфликтовать с make-файлом, сгенерированным autotools или cmake.

Конечно, вы можете делать такие вещи, как помещать свои собственные make-файлы в подкаталог, а затем вызывать make с аргументом вроде make -f rawmake/makefile или что-то типа того. Но нет удобного способа поддержать их всех.

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

То, что вы выберете, во многом зависит от вашего проекта. Если ваш проект выполняется только (или почти исключительно) в системах типа POSIX, вы хотите, чтобы он был максимально переносимым даже для гораздо более старых систем, даже если он использует много специальных функций ОС, или вы хотите, чтобы параметры его установки и сборки были чрезвычайно гибкий (прямая поддержка кросс-компиляции и т. д.), тогда autotools - хороший выбор. Если ваш проект работает на множестве разных типов ОС (в частности, на Windows), и вы хотите, чтобы люди могли легко разрабатывать с их выбором IDE (Visual Studio, Xcode и т. Д.), Тогда cmake - хороший выбор.

Если ваша программа проста в сборке и не требует каких-либо настроек или настроек, или вы уже знакомы с make-файлами и не хотите изучать совершенно новый язык только для сборок, тогда необработанные make-файлы могут быть хорошим выбором.

Другие вопросы по тегам