Может ли проект одновременно поддерживать Autotools и Cmake? - PullRequest
0 голосов
/ 08 июня 2019

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

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

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

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

Бонус за: может ли проект поддерживать как Autotools , так и Cmake и даже простоbare Сделать в то же время ?

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

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

1 Ответ

2 голосов
/ 08 июня 2019

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

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

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

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

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

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

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

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

...